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();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.