Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用数据报套接字执行双向IPC_Java_Sockets_Networking_Udp_Ipc - Fatal编程技术网

Java 如何使用数据报套接字执行双向IPC

Java 如何使用数据报套接字执行双向IPC,java,sockets,networking,udp,ipc,Java,Sockets,Networking,Udp,Ipc,我开发了一个应用程序,在两个应用程序(进程)之间使用双向通信。我故意使用DatagramSocket是有原因的。在应用程序的服务器端,当我发送一个DatagramPack时,它不是由客户端接收的,而是由服务器本身接收的,因为服务器在发送消息之后才接收消息。这是因为客户端和服务器具有相同的主机地址。如果客户机和服务器程序在不同的计算机上运行,则不会出现此问题。客户端和服务器程序是: 服务器程序: package Sockets; import java.io.IOException; impor

我开发了一个应用程序,在两个应用程序(进程)之间使用双向通信。我故意使用DatagramSocket是有原因的。在应用程序的服务器端,当我发送一个DatagramPack时,它不是由客户端接收的,而是由服务器本身接收的,因为服务器在发送消息之后才接收消息。这是因为客户端和服务器具有相同的主机地址。如果客户机和服务器程序在不同的计算机上运行,则不会出现此问题。客户端和服务器程序是:

服务器程序:

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(),现在工作正常。。。谢谢