为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

JHsssss 2016-10-16 16:11:54
//省略了引包 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
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 1411 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信