UDP 기반

연결 되 지 않 은 작업 은 UDP 프로 토 콜 을 사용 합 니 다:
하나의 데이터 메 시 지 는 독립 된 단원 으로 이번 배달 의 모든 정보,목적 주소 와 보 낼 내용 을 포함 하고 빠 르 고 효율 적 이지 만 신뢰성 이 좋 지 않다.
UDP 프로 토 콜 의 Socket 은 연결 되 지 않 은 Socket 입 니 다.
UDP 통신 API
DatagramSocket 클래스:
UDP 를 받 아들 이 고 보 내 는 Socket 인 스 턴 스 를 만 드 는 데 사 용 됩 니 다.
구조 기:
DatagramSocket(),특수 용법 으로 클 라 이언 트 프로 그래 밍 에 자주 사용 되 며 특정한 감청 포트 가 없습니다.
DatagramSocket(int port),인 스 턴 스 를 만 들 고 port 포트 의 메 시 지 를 고정 적 으로 감청 합 니 다.
DatagramSocket(int port,InerAddress local Addr)은 한 기계 가 여러 개의 ip 주 소 를 가지 고 있 을 때 local Addr 에서 만 받 는 메 시 지 를 만 듭 니 다.
4 가지 주요 방법
void receive(DatagramPacket d):데이터 메 시 지 를 d 에 받 습 니 다.장애 가 생기다.
void send(DatagramPacket d):목적지 까지 메시지 d 를 보 냅 니 다.
void setSoTimeout(int timeout):시간 초과 설정,단 위 는 밀리초 입 니 다.
void close():DatagramSocket 을 닫 습 니 다.
DatagramPacket 클래스:
메 시 지 를 처리 할 때 바이트 배열,목표 주소,목표 포트 등 데 이 터 를 메시지 로 포장 하거나 메 시 지 를 바이트 배열 로 분해 합 니 다.대부분의 플랫폼 은 8192 바이트 크기 의 메 시 지 를 지원 할 수 있다.
구조 기:
발송 자:
DatagramPacket(byte[] buf,int length,InetAddress addr,int port)
DatagramPacket(byte[] buf,int offset,int length,InetAddress addr,int port)
수신 자:
DatagramPacket(byte[] buf,int length)
DatagramPacket(byte[] buf,int offset,int length)
간단 한 UDP 통신 프로그램 은 다음 과 같 습 니 다.

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public class UDPSend {
	/**
	 * UDP     ,args[0]   host.args[1]    ,args[2]   
	 * @param args
	 */
	public static void main(String [] args){
		try {
			if(args.length<3)
				throw new IllegalArgumentException("Wrong number of args");
			String host = args[0];
			int port = Integer.parseInt(args[1]);
			String msg = args[2];
			byte [] message;
			message = msg.getBytes();
			InetAddress addr = InetAddress.getByName(host);//  host   
			DatagramSocket dgs = new DatagramSocket();
			DatagramPacket dgp = new DatagramPacket(message,message.length,addr,port);
			dgs.send(dgp); //     
			dgs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceive {
	public static void main(String [] args){
		try {
			if(args.length!=1)
				throw new IllegalArgumentException("Wrong number of args");
			byte [] buffer = new byte [1024<<1];
			DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
			DatagramSocket socket = new DatagramSocket(Integer.parseInt(args[0]));
			for(;;) {
				socket.receive(packet);
				String msg = new String(packet.getData());
				System.out.println(packet.getAddress().getHostName()+" "+msg);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}


좋은 웹페이지 즐겨찾기