최적화된 UDP 코드 및 다중 스레드 구현
public class SendDemo {
public static void main(String[] args) throws IOException {
// Socket
DatagramSocket ds = new DatagramSocket() ;
//
byte[] bys = "hello,udp, ".getBytes() ;
DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.0.124"),12345) ;
//
ds.send(dp);
//
ds.close();
}
}
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// Socket
DatagramSocket ds = new DatagramSocket(12345) ;
//
// 1024 1024
byte[] bys = new byte[1024] ;
DatagramPacket dp = new DatagramPacket(bys, bys.length);
//
ds.receive(dp);//
// ,
// ip
String ip = dp.getAddress().getHostAddress() ;
//public byte[] getData()
//public int getLength()
String s = new String(dp.getData(), 0,dp.getLength()) ;
//
System.out.println("from"+ip+"data is:"+s);
//
ds.close();
}
}
상기 코드는 한 번에 한 개의 메시지를 보낼 수 있을 뿐, 여러 번 발송할 수 없다. 다음은 우리가 어떻게 여러 번 발송하고 수신하는지 배운다.
다중 스레드: Runable 인터페이스 방식 SendThread implements Runnable {} 송신단의 스레드 수신단의 스레드 주 스레드
하나의 창만 있으면 됩니다.
public class SendDemo {
public static void main(String[] args) {
try {
// Socket
DatagramSocket ds = new DatagramSocket();
//
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null ; //
while((line=br.readLine())!=null){
//
if("886".equals(line)) {
break ;
}
byte[] bys = line.getBytes() ;
int length = bys.length ;
//
DatagramPacket dp = new DatagramPacket(bys,length,
InetAddress.getByName("192.168.10.1"), 10086);
//
ds.send(dp);
}
//
ds.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class ReceiveDemo {
public static void main(String[] args) {
try {
// Socket
DatagramSocket ds = new DatagramSocket(10086);
while(true) {
//
byte[] bys = new byte[1024] ;
DatagramPacket dp = new DatagramPacket(bys, bys.length) ;
//
ds.receive(dp);
//
String ip = dp.getAddress().getHostAddress() ;
String s = new String(dp.getData(), 0, dp.getLength()) ;
System.out.println("from" +ip +"data is:"+s);
// , ,
// ds.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
다중 스레드:
Runable 인터페이스 방식 SendThread implements Runnable {} 송신단의 스레드 수신단의 스레드 메인 스레드는 하나의 창만 있으면 됩니다. 데이터가 간단한 채팅방 프로젝트의 채팅방 집합 + 다중 스레드 + IO 흐름 + 네트워크 프로그래밍 종합 응용 1) 채팅 2) 온라인 인원 4) 송신 파일
5) 오프라인 알림
public class ReceiveThread implements Runnable {
private DatagramSocket ds;
public ReceiveThread(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
try {
while(true) {
//
byte[] bys = new byte[1024] ;
DatagramPacket dp = new DatagramPacket(bys, bys.length) ;
//
ds.receive(dp);
//
String ip = dp.getAddress().getHostAddress() ;
String s = new String(dp.getData(), 0, dp.getLength()) ;
System.out.println("from" +ip +"data is:"+s);
// , ,
// ds.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
public class SendThread implements Runnable {
private DatagramSocket ds ;
public SendThread(DatagramSocket ds) {
this.ds = ds ;
}
@Override
public void run() {
try {
//
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
String line = null ;
//
while((line=br.readLine())!=null) {
//
if("over".equals(line)) {
break ;
}
byte[] bys = line.getBytes() ;
//
DatagramPacket dp =
new DatagramPacket(bys, bys.length,
InetAddress.getByName("192.168.1.103"), 10086) ;
//
ds.send(dp);
}
//
ds.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
public class ChartRoom {
public static void main(String[] args) throws Exception {
// Socket
DatagramSocket sendSocket = new DatagramSocket() ;
DatagramSocket receiveSocket = new DatagramSocket(10086) ;
//
SendThread st = new SendThread(sendSocket) ;
ReceiveThread rt = new ReceiveThread(receiveSocket) ;
//
Thread t1 = new Thread(st) ;
Thread t2 = new Thread(rt) ;
//
t1.start();
t2.start();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.