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

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

问题描述:

我是新来的java套接字,我想创建一个简单的UDP传输使用客户端服务器。我现在的问题是服务器正在运行无限循环,而不是将消息发送到客户端。很抱歉,如果我做了一些愚蠢的错误,感谢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

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

如果协议改变了想法是使用上的要求setData()方法把回复到它,再而不是创建一个新的数据报。