Udp Server Client java

时间:2016-07-02 06:04:38

标签: java network-programming udp client-server

我编写了UDP服务器客户端程序。我面临的问题是,当我运行服务器程序时,它不是在等待客户端连接。整个代码在运行到结束后执行。当我在服务器端的执行之间运行客户端时,客户端正在从其执行点接收数据。这是我的服务器代码 -

public static void main(String args[]) throws Exception
  {
     DatagramSocket serverSocket = new DatagramSocket(4321);
        byte[] sendData;
        String sentence = null;
        FileInputStream file = new FileInputStream(new File("E:\\Deepak.txt"));
        InetAddress IPAddress=InetAddress.getByName("localhost");
        BufferedReader in = new BufferedReader(new InputStreamReader(file));
     do{
              while((sentence = in.readLine()) != null)
              {
              Thread.sleep(3000);
              System.out.println(sentence);
              sendData = sentence.getBytes();
              DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length,IPAddress,9876);
              serverSocket.send(sendPacket);
             }
           }while(true);
  }

这是我的客户端代码 -

public static void main(String args[]) throws SocketException, UnknownHostException, IOException 
{
    DatagramSocket clientSocket = new DatagramSocket();
    byte[] receiveData = new byte[1024];
    String sentence ;
    while(true) 
           {                 
             DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
             receivePacket.getLength();
             System.out.println(receivePacket.getLength());
             clientSocket.receive(receivePacket);
             sentence = new String( receivePacket.getData());                  
           }
  }

1 个答案:

答案 0 :(得分:1)

UDP是无连接的,因此不存在连接。 您只能发送数据包(在 fire并忘记方式,java中的send将数据发送到Datagram中指定的端口)或接收端口上的数据包(java中的receive将阻塞,直到收到数据包为止。)

因此,如果您希望服务器仅在客户端“连接”它时发送数据,那么您需要在UDP之上实现自己的连接。

所以总结:

  • send不会等待任何事情,只会将数据报丢弃在电线上
  • receive将等待数据报到达

有了上述信息,您需要编写自己的协议来保持连接。