UDP实现多线程
UDP实现多线程时,发生了错误(while怎么设置停止语句,要不然内存会一直飙升)。谁有编写好的UDP多线程程序?
UDP实现多线程时,发生了错误(while怎么设置停止语句,要不然内存会一直飙升)。谁有编写好的UDP多线程程序?
2016-10-04
package UDPTest;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 服务器端,实现基于UDP的用户登录
*
* @author admin
*
*/
public class UDPService {
public static void main(String[] args) throws IOException {
/*
* 接受客户端发送的数据
*/
// 创建服务器端DatagramSocket,并指定端口
DatagramSocket socket = new DatagramSocket(8800);
System.out.println("---服务器即将启动,等待客户端连接---");
// 创建数据报,用于接受客户端发送的数据
// 创建字节数组,用于指定接受的数据包的大小
int count = 0;
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
// 接受客户端发送的数据,此方法在接受数据报之前会一直堵塞
socket.receive(packet);
// 创建一个多线程
UDPThread thread = new UDPThread(packet, socket);
// 线程开始
thread.start();
count++;
System.out.println("当前客户端的数量为:" + count);
// 查看连接的客户端的地址
System.out.println("当前客户端的地址为:" + packet.getAddress());
}
}
}
package com.imooc;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServerThread extends Thread{
DatagramPacket packet;
DatagramSocket socket;
public UDPServerThread(DatagramPacket packet, DatagramSocket socket) {
super();
this.packet = packet;
this.socket = socket;
}
public void run(){
//读取数据
byte[] data=packet.getData();
String inf=new String(data,0,packet.getLength());
System.out.println("我是服务器,客户端说:"+inf);
/*
* 与客户端响应
*/
InetAddress address=packet.getAddress();
int port =packet.getPort();
byte[] data2="欢迎您".getBytes();
//创建数据报
DatagramPacket packet2=new DatagramPacket(data2, data2.length, address, port);
try {
socket.send(packet2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
举报