java에서 아날로그 UDP 전송의 송신단과 수신단 실례 상세 정보
1. UDP 전송을 위한 송신 포트 생성
1. UDP의 Socket 서비스 구축;
2. 보낼 데이터를 패키지에 봉인한다.
3. UDP의 Socket 서비스를 통해 패킷을 전송합니다.
4. Socket 서비스를 종료합니다.
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSend {
public static void main(String[] args) throws IOException {
System.out.println(" ......");
// 1、 UDP Socket, DatagramSocket
DatagramSocket ds = new DatagramSocket();
// 2、
String str = "UDP :I'm coming!";
byte[] buf = str.getBytes(); // DatagramPacket
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.191.1"), 10000);
// 3、 UDP Socket , send
ds.send(dp);
// 4、 Socket
ds.close();
}
}
2. UDP 전송을 위한 수신단 생성1. UDP의 Socket 서비스를 구축한다. 데이터를 수신하려면 포트 번호를 명확히 해야 한다.
2. 데이터 패키지를 생성하여 수신된 데이터를 저장하고 데이터 패키지 대상의 방법으로 이 데이터를 해석하기 편리하다.
3. UDP의 Socket 서비스의receive 방법으로 데이터를 수신하여 패키지에 저장한다.
4. 데이터 패키지의 방법을 통해 이 데이터를 분석한다.
5. Socket 서비스를 종료합니다.
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceive {
public static void main(String[] args) throws IOException {
System.out.println(" ......");
// 1、 UDP Socket
DatagramSocket ds = new DatagramSocket(10000);
// 2、
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 3、
ds.receive(dp); //
// 4、 , : 、 、
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip + ":" + port + ":" + text);
// 5、 Socket
ds.close();
}
}
3. UDP 전송의 송신 및 수신 포트 최적화앞의 두 부분에서 우리는 한 번에 한 가지 메시지만 보내고 서비스를 닫을 수 있기 때문이다!따라서 만약 우리가 여러 개의 메시지를 보내고 싶다면, 끊임없이 송신단에서 보낸 내용을 수정하고, 서버를 다시 시작해야 하기 때문에 비교적 번거롭다.이러한 단점을 극복하기 위해 다음과 같이 최적화할 수 있습니다.
1. 송신단에서 BufferedReader를 만들고 키보드에서 내용을 기록합니다.
2. 수신단에 while (ture) 순환을 추가하고 끊임없이 내용을 순환합니다.
/**
* UDP
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSend {
public static void main(String[] args) throws IOException {
System.out.println(" ......");
// UDP Socket, DatagramSocket
DatagramSocket ds = new DatagramSocket();
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = bufr.readLine()) != null) {
// DatagramPacket
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.191.1"), 10000);
// UDP Socket , send
ds.send(dp);
// over,
if ("over".equals(line))
break;
}
// Socket
ds.close();
}
}
/**
* UDP
*/
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceive {
public static void main(String[] args) throws IOException {
System.out.println(" ......");
// UDP Socket
DatagramSocket ds = new DatagramSocket(10000);
while(true) {
//
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//
ds.receive(dp); //
// , : 、 、
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip + ":" + port + ":" + text);
}
}
}
4. 채팅방 만들기UDP(User Datagram Protocol, 사용자 데이터 보고 프로토콜)의 관련 성질에 따라 우리는 간단한 UDP 전송 프로토콜 기반의 채팅방을 만들어 상호작용 채팅 기능을 실현할 수 있다.
/**
* UDP
*/
package chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Send implements Runnable {
private DatagramSocket ds;
public Send(DatagramSocket ds) {
this.ds = ds;
}
public void run() {
try {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = bufr.readLine()) != null) {
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.191.255"), 10001);
ds.send(dp);
if ("886".equals(line))
break;
}
ds.close();
} catch (Exception e) {
System.out.println(" , !");
}
}
}
/**
* UDP
*/
package chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Rece implements Runnable {
private DatagramSocket ds;
public Rece(DatagramSocket ds) {
this.ds = ds;
}
public void run() {
try {
while (true) {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
String text = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip + ":::" + text);
if(text.equals("886")){
System.out.println(ip+"...... !");
}
}
} catch (Exception e) {
System.out.println(" , !");
}
}
}
/**
* UDP
*/
package chat;
import java.io.IOException;
import java.net.DatagramSocket;
public class ChatRoom {
public static void main(String[] args) throws IOException {
DatagramSocket send = new DatagramSocket();
DatagramSocket rece = new DatagramSocket(10001);
new Thread(new Send(send)).start();
new Thread(new Rece(rece)).start();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.