여기 두 사람이 소통하고 있습니다. IP를 기준으로 판단하면 문제가 없습니다.
다음과 같이 코드 코드를 복사합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
java.net.InetAddress 가져오기;
import java.net.SocketException;
import java.net.UnknownHostException;
공개 클래스 나 {
public static void main(String[] args)에서 IOException이 발생합니다.
new ReciveThread().start();//구성 리스너는 앞에 배치되어야 합니다.
새로운 SendInfo().main(args);
}
}
클래스 SendInfo {
public static void main(String[] args)에서 IOException이 발생합니다.
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
문자열 str = null;
문자열 라인 = "";
while ((str = bf.readLine()) != null) {
라인 += str;
if (str.equals("ok")) {
보내기(라인);
라인 = "";
}
if (str.equals("안녕")) {
bf.close(); // break를 추가해야 합니다. 그렇지 않으면 캐리지 리턴 신호가 발생합니다.
}
}
}
정적 무효 보내기(문자열 str) {
// UDP 네트워크 프로그램
DatagramSocket ds = null;
DatagramPacket dp = null;
노력하다 {
ds = new DatagramSocket(3000);//포트 번호 열기
} 잡기(SocketException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
노력하다 {
byte[] ip = 새로운 byte[] { (바이트) 10, 1, 1, (바이트) 200 };
dp = 새로운 DatagramPacket(str.getBytes(), str.length(),
InetAddress.getByAddress(ip), 9000);//faso
} 잡기(UnknownHostException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
노력하다 {
ds.send(dp);
System.out.println("보내기 성공");
} 잡기(IOException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
ds.close();
}
}
ReciveThread 클래스는 Thread {를 확장합니다.
공개 무효 실행() {
동안 (참) {
DatagramSocket ds = null;
바이트[] buf = 새 바이트[1024];
DatagramPacket dp = null;
노력하다 {
ds = new DatagramSocket(9000);//포트 열기
} 잡기(SocketException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
dp = new DatagramPacket(buf, 1024);
노력하다 {
ds.수신(dp);
} 잡기(IOException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
문자열 str = 새로운 문자열(dp.getData(), 0, dp.getLength()) + "from"
+ dp.getAddress().getHostAddress() + ":port" + dp.getPort();
System.out.println(str);
ds.close();
}
}
}