Java 如何使用数据报套接字执行双向IPC
我开发了一个应用程序,在两个应用程序(进程)之间使用双向通信。我故意使用DatagramSocket是有原因的。在应用程序的服务器端,当我发送一个DatagramPack时,它不是由客户端接收的,而是由服务器本身接收的,因为服务器在发送消息之后才接收消息。这是因为客户端和服务器具有相同的主机地址。如果客户机和服务器程序在不同的计算机上运行,则不会出现此问题。客户端和服务器程序是: 服务器程序:Java 如何使用数据报套接字执行双向IPC,java,sockets,networking,udp,ipc,Java,Sockets,Networking,Udp,Ipc,我开发了一个应用程序,在两个应用程序(进程)之间使用双向通信。我故意使用DatagramSocket是有原因的。在应用程序的服务器端,当我发送一个DatagramPack时,它不是由客户端接收的,而是由服务器本身接收的,因为服务器在发送消息之后才接收消息。这是因为客户端和服务器具有相同的主机地址。如果客户机和服务器程序在不同的计算机上运行,则不会出现此问题。客户端和服务器程序是: 服务器程序: package Sockets; import java.io.IOException; impor
package Sockets;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
class ServerTask extends Thread {
private DatagramSocket serverSocket;
private final int portNumber;
public ServerTask() throws SocketException {
portNumber = 1234;
serverSocket = new DatagramSocket(portNumber);
}
@Override
public void run() {
while (true){
byte[] byteBuffer = new byte[256];
DatagramPacket packet = new DatagramPacket(byteBuffer, byteBuffer.length);
try {
serverSocket.receive(packet);
InetAddress clientAddress = packet.getAddress();
DatagramPacket packet2 = new DatagramPacket("Hi client".getBytes(),
"Hi client".getBytes().length,
clientAddress,
3444);
serverSocket.send(packet2);
Thread.sleep(100);
System.out.printf("Server received: %s\n", new String(byteBuffer));
} catch (IOException e) {
System.err.println("IOException!");
System.exit(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class UDPEchoServer {
public static void main(String[] args) throws SocketException{
ServerTask myServerTask = new ServerTask();
myServerTask.start();
}
}
客户端程序:
package Sockets;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPEchoClient {
public static void main(String[] args) throws SocketException{
DatagramSocket socket = new DatagramSocket();
try {
DatagramPacket packet = new DatagramPacket(
"Hello server".getBytes(),
"Hello server".getBytes().length,
InetAddress.getByName("127.0.0.1"),
1234);
socket.send(packet);
byte[] byteArray = new byte[256];
DatagramPacket packet2 = new DatagramPacket(byteArray, byteArray.length);
socket.receive(packet2);
String myString = new String(byteArray);
System.out.println("Client received: " + myString);
} catch (UnknownHostException e) {
System.err.println("UnknownHostException!");
System.exit(1);
} catch (IOException e){
System.err.println("IOException!");
System.exit(1);
}
socket.close();
}
}
您是否已尝试在将端口3444传递给构造函数的客户端中创建
socket
?在上面的代码中,没有传递到UDPEchoClient
的socket
@hotkey Yes.的端口。。谢谢我错写了3444。我将3444改为packet.getPort(),现在工作正常。。。谢谢…您是否尝试在客户端中创建套接字
,将端口3444传递给构造函数?在上面的代码中,没有传递到UDPEchoClient
的socket
@hotkey Yes.的端口。。谢谢我错写了3444。我将3444改为packet.getPort(),现在工作正常。。。谢谢