●UDP 소켓
- TCP 소켓은 서로 연결된 상태에서의 통신 방법이다. 이 방법은 높은 신뢰성이 요구된느 응용 프로그램에 적합하지만 높은 신뢰성이 요구되지 않거나 적은 양의 데이터를 전송할 때는 네트워크에 부담을 많이 주기 때문에 적합하지 않다. 그래서 이때는 UDP소켓을 쓰는 것이 좋다.
- UDP는 TCP소켓에 비해 신뢰성과 안정성은 부족하지만 연결을 설정하지 않으므로 네트워크에 부담을 주지 않는다.
- 자바에서는 DatagramPacket, DatagramSocket 클래스를 사용한다.
- DatagramPacket 클래스는 데이터그램을 사용할 수 있게 한다.
- 데이터그램 패켓은 비연결 패킷 전송 서비스를 구현하기 위해 사용한다.
- DatagramSocket 클래스는 데이터그램 패킷을 보내거나 받기 위한 데이터그램 소켓 기능을 제공해준다.
●ex
- UDPServer.java
import java.net.*; import java.io.*; public class UDPServer { public final static int discardPort = 3000; static byte[] buffer = new byte[65507]; public static void main(String[] args){ int port; try{ port=Integer.parseInt(args[0]); }catch(Exception e){ port=discardPort; } try{ DatagramSocket ds = new DatagramSocket(port); DatagramPacket dp = new DatagramPacket(buffer, buffer.length); while(true){ try{ ds.receive(dp); String s = new String(dp.getData(), 0, 0, dp.getLength()); System.out.println(dp.getAddress()+" at port"+dp.getPort()+" says"+s); }catch(IOException e){ System.err.println(e); } } }catch(SocketException se){ System.out.println("22"); System.err.println(se); } } } |
- UDPClient.java
import java.net.*; import java.io.*; public class UDPClient { public final static int port = 3000; public static void main(String[] args){ String hostname; if(args.length>0){ hostname=args[0]; }else{ hostname="localhost"; } try{ String strInput; DatagramPacket outPacket; InetAddress server = InetAddress.getByName(hostname); BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket dSock = new DatagramSocket(); while(true){ strInput = userInput.readLine(); if(strInput.equals("quit"))break; byte[] data = strInput.getBytes(); outPacket = new DatagramPacket(data, data.length, server, port); UDPClient.viewInfo(outPacket); dSock.send(outPacket); }
}catch(UnknownHostException e){ System.err.println(e); }catch(SocketException se){ System.err.println(se); }catch(IOException e){ System.err.println(e); } } public static void viewInfo(DatagramPacket packet){ System.out.println("패킷의 대상 주소:"+packet.getAddress().toString()); System.out.println("패킷의 대상 포트:"+packet.getPort()); System.out.println("패킷의 데이터 크기:"+packet.getLength()); } }
|
'프로그래밍 > java' 카테고리의 다른 글
자바 java.io 패키지, 바이트 스트림(Byte Stream) (0) | 2014.04.11 |
---|---|
자바 java.io 패키지, 스트림 (0) | 2014.03.07 |
자바 네트워크 프로그래밍 TCP/IP 소켓 (0) | 2014.01.31 |
자바 네트워크 프로그래밍 URLEncoder, URLDecoder, URLConnection 클래스 (0) | 2014.01.29 |
자바 네트워크 프로그래밍 URL 클래스 (0) | 2014.01.29 |
댓글