A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一个通过UDP协议传输键盘输入数据的案例代码
发送端代码
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.net.DatagramPacket;
  5. import java.net.DatagramSocket;
  6. import java.net.InetAddress;

  7. public class SendMessage implements Runnable {
  8.         private DatagramSocket socket;

  9.         public SendMessage(DatagramSocket socket) {
  10.                 super();
  11.                 this.socket = socket;
  12.         }

  13.         @Override
  14.         public void run() {
  15.                 // 不停获取用户的输入
  16.                 while (true) {
  17.                         BufferedReader br = new BufferedReader(new InputStreamReader(
  18.                                         System.in));
  19.                         try {
  20.                                 // 读取数据
  21.                                 String message = br.readLine();
  22.                                 // 打包数据
  23.                                 DatagramPacket dp = new DatagramPacket(message.getBytes(),
  24.                                                 message.getBytes().length,
  25.                                                 InetAddress.getByName("kaven-PC"), 10086);
  26.                                 // 发送数据
  27.                                 socket.send(dp);
  28.                                 // 判断是否结束发送
  29.                                 if ("bye".equals(message)) {
  30.                                         break;
  31.                                 }
  32.                         } catch (IOException e) {
  33.                                 e.printStackTrace();
  34.                         }
  35.                 }
  36.                 socket.close();
  37.         }

  38. }
复制代码

接收端代码
  1. import java.io.IOException;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;

  4. public class ReceiveMessage implements Runnable {
  5.         private DatagramSocket socket;

  6.         public ReceiveMessage(DatagramSocket socket) {
  7.                 super();
  8.                 this.socket = socket;
  9.         }

  10.         @Override
  11.         public void run() {
  12.                 // 循环接收数据
  13.                 while (true) {
  14.                         DatagramPacket dp = new DatagramPacket(new byte[1024], 0, 1024);
  15.                         try {
  16.                                 socket.receive(dp);
  17.                                 System.out.println(dp.getAddress().getHostName() + ":"
  18.                                                 + new String(dp.getData()));
  19.                         } catch (IOException e) {
  20.                                 e.printStackTrace();
  21.                         }
  22.                 }
  23. }

  24. }
复制代码

测试类
  1. import java.io.IOException;
  2. import java.net.DatagramSocket;

  3. public class ChatDemo {
  4.         public static void main(String[] args) throws IOException {
  5.                 //创建两个socket服务对象:一个用于发送数据,一个用于接收数据
  6.                 DatagramSocket sendSocket = new DatagramSocket();
  7.                 DatagramSocket receiveSocket = new DatagramSocket(10086);
  8.                 //创建发送端对象和接收端对象
  9.                 SendMessage send = new SendMessage(sendSocket);
  10.                 ReceiveMessage receive = new ReceiveMessage(receiveSocket);
  11.                 //创建两个线程用于发送和接收数据
  12.                 Thread sendThread = new Thread(send, "send");
  13.                 Thread receiveThread = new Thread(receive, "receive");
  14.                 //启动线程
  15.                 sendThread.start();
  16.                 receiveThread.start();
  17.         }
  18. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马