如何知道客户端是否在服务器/客户端断开连接?

时间:2017-02-22 04:22:03

标签: java sockets udp

我遇到类似Client1向client2发送数据的情况,并从那里将数据发送到Server.Now从服务器将数据发送到其他多个客户端。

所以,现在当Client1连接到client2并发送一些之后  如果client1断开如何知道client1的数据,则返回数据  在client2中断开连接?

我的Client1代码段是:

               InetAddress address = InetAddress.getByName(ipAddress);
               MulticastSocket socket = new MulticastSocket(port);
               socket.joinGroup(address);//join a Multicast group and send the group salutations
               byte[] data;
               System.out.print("Enter data: ");
               String str = (br.readLine());
               DatagramPacket packet;
               //send the packet
               data = new byte[1024];
               data = str.getBytes();
               packet = new DatagramPacket(data,str.length(),address,port);
               socket.send(packet);

我的Client2代码段是:

  InetAddress address = InetAddress.getByName(ipAddress);
  byte[] data = new byte[1024];
  DatagramPacket packet = new  DatagramPacket(data,data.length);
  MulticastSocket socket = new MulticastSocket(port);
  socket.joinGroup(address);//join a Multicast group and send the group salutations
  // receive the packets
  socket.receive(packet);
  str = new String(packet.getData(),0,packet.getLength());
  System.out.println(ipname+" with portnumber  "+port + " sent : "+str); 

现在,如果client1连接到client2并且一段时间后它断开了如何知道client1在client2中断开连接的方式?

我已经使用了isConnected(), isbound(), isClosed()isReachable(int timeout)方法。但他们都没有帮助我。

1 个答案:

答案 0 :(得分:2)

JavaDoc forDatagramPacket说:

  

数据报包用于实现无连接数据包   送货服务。

无连接协议没有可以关闭的连接。如果您在UDP / DatagramPacket之上构建自己的协议,请将其作为协议的一部分来“关闭”会话。