多线程控制数据接收和发送

发送端:

public class Send implements Runnable {
 private DatagramSocket datagramSocket;
 public Send(DatagramSocket datagramSocket) {
  this.datagramSocket=datagramSocket;
 }
 @Override
 public void run() {
  try {
   BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
   String line;
   while((line=bufferedReader.readLine())!=null){
    byte[] buf=line.getBytes();
    DatagramPacket datagramPacket=new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.100"),10003);
    datagramSocket.send(datagramPacket);
   }
   datagramSocket.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

 

接收端:

public class Receve implements Runnable {
 private DatagramSocket datagraSocket;
 public Receve(DatagramSocket datagraSocket) {
  this.datagraSocket=datagraSocket;
 }
 @Override
 public void run() {
  while(true){
   try {
    byte[] buf=new byte[1024];
    DatagramPacket datagramPacket=new DatagramPacket(buf, buf.length);
    datagraSocket.receive(datagramPacket);
    String ip=datagramPacket.getAddress().getHostAddress();
    String data=new String(datagramPacket.getData(),0,datagramPacket.getLength());
    System.out.println(ip+":"+data);
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

}

main‘函数:

 try {
    DatagramSocket send = new DatagramSocket();
    DatagramSocket receive=new DatagramSocket(10003);
    new Thread(new Send(send)).start();
    new Thread(new Receve(receive)).start();
   } catch (SocketException e) {
    e.printStackTrace();
   }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的`threading`模块来实现多线程同时接收发送TCP消息。具体实现步骤如下: 1. 创建一个`socket`对象,并绑定到本地端口上,等待客户端连接。 ```python import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8888)) server_socket.listen(5) ``` 2. 创建一个线程函数来处理客户端的请求。 ```python import threading def handle_client(client_socket): while True: data = client_socket.recv(1024) if not data: break client_socket.send(data) client_socket.close() ``` 在这个线程函数中,我们通过`recv()`函数接收客户端发送过来的数据,并使用`send()`函数将数据发送回客户端。如果客户端关闭了连接,我们就退出循环,并关闭客户端套接字。 3. 在主线程中,使用`accept()`函数接受客户端连接,并创建一个新的线程来处理客户端请求。 ```python while True: client_socket, client_address = server_socket.accept() print('New connection from', client_address) client_thread = threading.Thread(target=handle_client, args=(client_socket,)) client_thread.start() ``` 每当有一个新的客户端连接进来,我们就打印一条信息,并创建一个新的线程来处理这个客户端的请求。新线程的目标函数就是我们前面定义的`handle_client()`函数。 完整的代码如下: ```python import socket import threading def handle_client(client_socket): while True: data = client_socket.recv(1024) if not data: break client_socket.send(data) client_socket.close() server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8888)) server_socket.listen(5) while True: client_socket, client_address = server_socket.accept() print('New connection from', client_address) client_thread = threading.Thread(target=handle_client, args=(client_socket,)) client_thread.start() ``` 这个服务器程序可以同时处理多个客户端请求,每个客户端都会在独立的线程中被处理。注意,在真实的生产环境中,我们需要考虑一些线程安全的问题,比如共享资源的竞争问题等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值