java에서 아날로그 UDP 전송의 송신단과 수신단 실례 상세 정보

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();
 }
}


좋은 웹페이지 즐겨찾기