【问题标题】:java sockets UDP bidirectional using datagramjava sockets UDP双向使用数据报
【发布时间】:2016-05-01 07:33:42
【问题描述】:

我是 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

【问题讨论】:

    标签: java sockets datagram


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多