java套接字UDP双向使用数据报

时间:2016-04-30 19:13:38

标签: java sockets datagram

我是java套接字的新手,我正在尝试使用客户端服务器创建一个简单的UDP传输。我现在的问题是服务器正在运行无限循环而不是将消息发送到客户端。对不起,如果我做了一些愚蠢的错误,谢谢

服务器:

import java.net.*;
import java.util.*;


class EchoServer {

  public static void main( String args[] ) throws Exception {

    DatagramSocket socket = new DatagramSocket(54373);
    DatagramPacket packet = new DatagramPacket(new byte[512],512);
    String temp = "Hello client";
    byte[] buffer = temp.getBytes();

    while (true) {
      socket.receive( packet );
      System.out.println("Received from client");

      DatagramPacket packet2 = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373);
      socket.send( packet2 );
    }   
  }
}

客户端:

import java.net.*;
import java.util.*;


class EchoClient {
  public static void main( String args[] ) throws Exception {
    DatagramSocket socket = new DatagramSocket();
    socket.setSoTimeout( 5000 );
    byte[] buffer = "Hello Server".getBytes();
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),54373);
    socket.send( packet );

    DatagramPacket packet2 = new DatagramPacket(new byte[512],512);
    socket.receive(packet2);
    System.out.println("Received from server");
  }
}

但是,我的服务器能够发送原始"数据包"而不是packet2

1 个答案:

答案 0 :(得分:0)

您的服务器正在发送回自己。在构造应答数据报时,它应该使用已经在请求数据报中的端口号,而不是使用自己的端口号。和IP地址。实际上它应该按原样发送请求数据报,因为它是一个echo服务器:不需要构建另一个。

如果协议发生变化,我们的想法是在请求中使用setData()方法将回复放入其中,而不是创建新的数据报。