Akashic Records

Java 네트워크 - 5 본문

오래된글/Java

Java 네트워크 - 5

Andrew's Akashic Records 2018. 4. 9. 11:08
728x90

8. UDP 데이터 그램과 소켓

UPD는 신뢰성보다 속도가 중요시 되는 데이터의 전송에 있어서 TCP의 훌륭한 대안이 된다. 즉, UDP 데이터를 전송하게 되면, 여러분은 데이터가 목적지에 도착했는지, 또는 여러분이 전송한 순서 대로 목적지에 도착 했는지 확인할 길이 없다.

A. UDP에서는 서버 소켓이라는 개념이 없다. 데이터르르 보내는 포트와 들어오는 연결 요청 신호에 귀 기울이는 포트에 대해 같은 종류의 소켓을 사용한다.

B. UDP는 데이터 그램 자체를 직접 다뤄야 한다.

C. DatagramSocket은 여러 호스트로부터 데이터를 받을 수 있다.


  • DatagramPacket : DatagramSocket을 통해 네트워크에서 보내지거나 받게 될 데이터의 패킷을 구현한다.

A. Public DatagramPacket(byte buffer[], int length) : 데이터를 받을 새로운 DatagramPacket을 생성한다. length는 buffer.length보다 적거나 같아야 한다.

B. Public DatagramPacket(byte buffer[], int length, InetAddress is, int port) : 다른 호스트로 전송할 DatagramPacket을 생성한다.

① package network.net.UDP;

② import java.net.*;

④ public class UDPSender {

⑤ public UDPSender() {

⑥ }

⑧ private void exec(String server, int port) {

⑨ String title = "This is a test.";

⑩ byte[] data = new byte[title.length()];

⑪ data = title.getBytes();

⑫ try {

⑬ InetAddress ia = InetAddress.getByName(server);

⑭ DatagramPacket dp = new DatagramPacket(data,data.length,ia,port);

⑮ System.out.println("This packet is address to "+dp.getAddress()

16 +" on port "+ dp.getPort());

17 System.out.println("There are "+dp.getLength()

18 +" bytes of data in the packet");

19 System.out.println(new String(dp.getData()));

20 } catch (UnknownHostException unhoste) {

21 System.err.println(unhoste);

22 }

23 }

24 public static void main(String[] args) {

25 UDPSender uDPSender = new UDPSender();

26 if(args.length != 2) {

27 System.exit(0);

28 } else {

29 uDPSender.exec(args[0], Integer.parseInt(args[1]));

30 }

31 }

32 }


  • Public DatagramSocket() throws SocketException : 익명 포트에 바인드 되는 DatagramSocket을 생성한다.

  • Public DatagramSocket(int Port) throws SocketException : 해당 포트에 바인드 되는 DatagramSocket을 생성한다.

① package network.net.UDP;

② import java.net.*;

③ import java.io.*;

⑤ public class UDPServer {

⑦ public final static int DEFAULT_PORT = 9;

⑧ public final static int MAX_PACKET_SIZE = 65507;

⑩ public static void main(String[] args) {

⑪ UDPServer udpserver = new UDPServer();

⑫ udpserver.exec(args);

⑬ }

⑮ private void exec(String[] args) {

16

17 int port = DEFAULT_PORT;

18 byte[] buffer = new byte[MAX_PACKET_SIZE];

19

20 try {

21 port = Integer.parseInt(args[0]);

22 } catch(Exception e) {}

23

24 try {

25 DatagramSocket server = new DatagramSocket(port);

26 DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

27

28 while (true) {

29 try {

30 server.receive(packet);

31 String s = new String(packet.getData(),

32 0,

33 packet.getLength());

34 System.out.println(packet.getAddress() +

35 " at port " +

36 packet.getPort() +

37 " says " +

38 s);

39 packet.setLength(buffer.length);

40 } catch(IOException e) {

41 System.err.println(e);

42 }

43 }

44 } catch(SocketException se) {

45 System.err.println(se);

46 }

47 }

48 }

49

50 package network.net.UDP;

51 import java.net.*;

52 import java.io.*;

53

54 public class UDPClient {

55

56 public final static int DEFAULT_PORT = 9;

57

58 public static void main(String[] args) {

59 UDPClient udpclient = new UDPClient();

60 udpclient.exec(args);

61 }

62

63 private void exec(String[] args) {

64 String hostname;

65 int port = DEFAULT_PORT;

66 if (args.length > 0) {

67 hostname = args[0];

68 try {

69 port = Integer.parseInt(args[1]);

70 } catch(Exception e) {}

71 } else {

72 hostname = "10.60.34.202";

73 }

74

75 try {

76 InetAddress server = InetAddress.getByName(hostname);

77 BufferedReader userInput = new BufferedReader(

78 new InputStreamReader(

79 System.in));

80 DatagramSocket theSocket = new DatagramSocket();

81

82 while (true) {

83 String theLine = userInput.readLine();

84 if (theLine.equals("."))

85 break;

86 byte[] data = theLine.getBytes();

87 DatagramPacket theOutput = new DatagramPacket(

88 data,

89 data.length,

90 server,

91 port);

92 theSocket.send(theOutput);

93 }

94 } catch(UnknownHostException e) {

95 System.err.println(e);

96 } catch(SocketException se) {

97 System.err.println(se);

98 } catch(IOException e) {

99 System.err.println(e);

100 }

101 }

102 }


728x90

'오래된글 > Java' 카테고리의 다른 글

Java performance tips-1  (0) 2018.04.09
Java 네트워크 - 6  (0) 2018.04.09
Java 네트워크 - 4  (0) 2018.04.09
Java 네트워크 - 3  (0) 2018.04.09
Java 네트워크 - 2  (0) 2018.04.09
Comments