Java 아 날로 그 UDP 통신 예시 코드
8193 단어 JAVAUDP커 뮤 니 케 이 션
1.1 회 발송,1 회 수신
1.1 발송 자
// ,
public class UdpClientDemo {
public static void main(String[] args) throws Exception {
// 1. Socket
DatagramSocket socket = new DatagramSocket();
// 1.2
String msg = " ";
InetAddress localhost = InetAddress.getByName("localhost");
System.out.println(localhost);
int port = 8080;
/*
UDP , ,--> DatagramPacket(), ,
:
-
-
-
- IP
-
*/
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
// 2.
socket.send(packet);
socket.close();
}
}
1.2 수신 자
// , , ,
public class UdpServerDemo {
public static void main(String[] args) throws Exception {
// 1. Socket,
DatagramSocket socket = new DatagramSocket(8080);
//
byte[] buffer = new byte[1024];
// 1.2
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
// 2. , :
socket.receive(packet);
//
socket.close();
//
System.out.println(packet.getAddress().getHostAddress());
// trim():
System.out.println(new String(packet.getData()).trim());
}
}
2,여러 번 발송,여러 번 접수한 측 이 여러 번 보 내 고 한 측 이 여러 번 받 으 며 while(true){}순환 을 추가 하여 어떤 상황 에서 물 러 나 도록 규정 하면 됩 니 다.
2.1 발송 자
public class ChatSenderDemo {
public static void main(String[] args) throws Exception {
// Socket
DatagramSocket socket = new DatagramSocket();
while (true) {
// ,
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//
String data = reader.readLine();
byte[] dataBytes = data.getBytes();
DatagramPacket packet = new DatagramPacket(dataBytes, dataBytes.length, new InetSocketAddress("127.0.0.1", 6666));
//
socket.send(packet);
//
if ("bye".equals(data)) {
break;
}
}
//
socket.close();
}
}
2.2 수신 자
public class ChatReceiveDemo {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(6666);
while (true) {
//
byte[] buffer = new byte[1024];
//
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
// ,
socket.receive(packet);
//
String receiveData = new String(packet.getData()).trim();
//
System.out.println(receiveData);
//
if ("bye".equals(receiveData)) {
break;
}
}
//
socket.close();
}
}
3.쌍방 통신 시 뮬 레이 션쌍방 이 UDP 통신 을 사용 하 는 것 을 모 의 하려 면 두 개의 스 레 드 를 켜 고 상기 코드 를[공통성 추출]하여 추상 화 해 야 한다.
이로써 쌍방 은 지 정 된 포트 를 통 해 서로 메 시 지 를 보 낼 수 있다.
3.1 발송 자의 라인
// Runnable , run()
public class TalkSender implements Runnable {
// ,
DatagramSocket socket = null;
//
BufferedReader reader = null;
//
private int fromPort;
// IP
private String toIP;
//
private int toPort;
//
public TalkSender(int fromPort, String toIP, int toPort) {
this.fromPort = fromPort;
this.toIP = toIP;
this.toPort = toPort;
try {
socket = new DatagramSocket(fromPort);
} catch (SocketException e) {
e.printStackTrace();
}
}
// run() ,
@Override
public void run() {
while (true) {
String data = null;
try {
// ,
reader = new BufferedReader(new InputStreamReader(System.in));
//
data = reader.readLine();
byte[] dataBytes = data.getBytes();
DatagramPacket packet = new DatagramPacket(dataBytes, dataBytes.length, new InetSocketAddress(toIP, toPort));
socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
//
if ("bye".equals(data)) {
break;
}
}
//
socket.close();
}
}
3.2 수신 자의 라인
public class TalkReveicer implements Runnable {
DatagramSocket socket = null;
//
private int formPort;
//
private String who;
public TalkReveicer(int formPort, String who) {
this.formPort = formPort;
this.who = who;
try {
socket = new DatagramSocket(formPort);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true) {
String receiveData = null;
try {
//
byte[] buffer = new byte[1024];
//
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
// ,
socket.receive(packet);
//
receiveData = new String(packet.getData());
System.out.println(who + ":" + receiveData.trim());
} catch (IOException e) {
e.printStackTrace();
}
//
if ("bye".equals(receiveData)) {
break;
}
}
//
socket.close();
}
}
3.3 모 의 학생
//
public class TalkStudent {
public static void main(String[] args) {
// 5555 , 6666
new Thread(new TalkSender(5555, "localhost", 6666)).start();
// 7777
new Thread(new TalkReveicer(7777, " ")).start();
}
}
3.4 모 의 선생님
//
public class TalkTeacher {
public static void main(String[] args) {
// 8888 , 7777
new Thread(new TalkSender(8888, "localhost", 7777)).start();
// 6666
new Thread(new TalkReveicer(6666, " ")).start();
}
}
요약:UDP 통신 을 사용 하 는데 그 주요 절 차 는 세 단계 로 나 뉜 다.
1 DatagramSocket()으로 포트 를 열 고 포트 를 열 어 채 팅 을 합 니 다.
2 DatagramPacket()으로 데 이 터 를 보 내 거나 받 습 니 다.
3 DatagramSocket 을 닫 고 자원 을 방출 합 니 다.
이상 은 자바 아 날로 그 UDP 통신 예제 코드 의 상세 한 내용 입 니 다.자바 아 날로 그 UDP 통신 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.