关于UDP实现多客户端登陆的一点问题

//省略了引包
public class UDPServer {
public static void main(String[] args) throws Exception {
int count=0;
// 创建服务器端DatagramSocket,指定端口
DatagramSocket socket=new DatagramSocket(8800);
// 创建数据报,用于接受客户端发送的数据,客户端发送的信息存储在packet里
byte[] data=new byte[1024];//创建字节数组,指定接受的数据包的大小
DatagramPacket packet=new DatagramPacket(data, data.length);
System.out.println("Server is ready");
while(true)
{
//等待接受数据
socket.receive(packet);
//启动线程
UDPServerThread udp=new UDPServerThread(socket,packet);
Thread t=new Thread(udp);
t.start();
count++;
System.out.println("历史连接数:"+count);
}
}

}

public class UDPServerThread implements Runnable {
DatagramSocket socket=null;
DatagramPacket packet=null;
//构造方法
public UDPServerThread(DatagramSocket socket,DatagramPacket packet)
{
this.socket=socket;
this.packet=packet;
}
@Override
public void run(){

/*
* 接受数据
*/	       
// 读取数据
String info=new String(packet.getData(), 0, packet.getLength());
System.out.println("我是服务器,客户端说:"+info);
/*
* 发送数据
*/
//定义客户端地址和端口,以及要发送的信息
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
   socket.close();
}
}

}

public class UDPClient {

public static void main(String[] args) throws Exception  {
/*
* 发送信息给服务器
*/
DatagramPacket packet=null;
DatagramSocket socket=null;
//1.定义服务器地址,端口号,数据
InetAddress address=InetAddress.getByName("localhost");
int port=8800;
byte[] data="用户名:admin;密码:123".getBytes();
//2.创建数据报
packet=new DatagramPacket(data, data.length,address,port);
//3.创建DatagramSocket对象
socket=new DatagramSocket();
//4.向服务器发送数据
socket.send(packet);
/*
* 接受服务器信息
*/
//1.创建数据报,用于接受服务器端响应的数据
byte[] data2=new byte[1024];
DatagramPacket packet2=new DatagramPacket(data2, data2.length);
//2.接受数据并输出
socket.receive(packet2);
String reply=new String(data2, 0, packet2.getLength());
System.out.println("我是客户端,服务器返回信息是:"+reply);
//3.关闭资源
socket.close();
}

}
//这样的代码有什么问题吗?运行服务器端后,再运行几次客户端就会报错

异常信息是:Exception in thread "main" java.net.SocketException: socket closed

JHsssss
浏览 1412回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java