分布式系统中的多线程客户端和服务器(Java)

分布式系统中的多线程客户端和服务器(Java),java,Java,我是套接字编程新手,我试图在服务器和客户机之间建立通信,但我不知道如何做到这一点,我对如何进行有点困惑。我已经写了下面的程序,但它是错误的,我不能得到我的头为什么 package server; import java.net.DatagramPacket; import java.net.DatagramSocket; public class Server { public static void main(String[] args) { // TODO c

我是套接字编程新手,我试图在服务器和客户机之间建立通信,但我不知道如何做到这一点,我对如何进行有点困惑。我已经写了下面的程序,但它是错误的,我不能得到我的头为什么

package server;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {


    public static void main(String[] args) {
        // TODO code application logic here
        try {
                DatagramSocket socket = new DatagramSocket(7000);
                socket.setSoTimeout(0);

                while(true)
                {
                    byte []buffer = new byte[1024];
                    DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
                    socket.receive(packet);
                    String message = new String (buffer);
                    System.out.println(message);
                    String Reply ="Am here";
                    DatagramPacket data = new DatagramPacket(Reply.getBytes(), Reply.getBytes().length, packet.getAddress(), packet.getPort());
                    socket.send(data);
                }
        }
        catch (Exception error){
            error.printStackTrace();
        }  
    }

}
客户

package client;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public class Client {


    public static void main(String[] args) {
        // TODO code application logic here
        try{

            String message = "Hello Server";
            String host = "localhost";
            InetAddress addr = InetAddress.getByName(host);
            DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, addr, 7000);
            DatagramSocket socket = new DatagramSocket(4000);
            socket.send(packet);

            DatagramSocket sockets = new DatagramSocket(7000);
            sockets.setSoTimeout(0);

            while(true)
            {
                byte []buffer = new byte[1024];
                DatagramPacket packets = new DatagramPacket(buffer,buffer.length);
                sockets.receive(packets);
                String messages = new String (buffer);
                System.out.println(messages);
                }

            }
            catch (Exception error){
                error.printStackTrace();
            }
    }

}
我怎样才能让他们沟通。我听说过多线程技术,但不知道它是如何工作的

我得到以下错误

java.net.BindException: Address already in use: Cannot bind
    at java.net.DualStackPlainDatagramSocketImpl.socketBind(Native Method)
    at java.net.DualStackPlainDatagramSocketImpl.bind0(DualStackPlainDatagramSocketImpl.java:84)
    at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:93)
    at java.net.DatagramSocket.bind(DatagramSocket.java:392)
    at java.net.DatagramSocket.<init>(DatagramSocket.java:242)
    at java.net.DatagramSocket.<init>(DatagramSocket.java:299)
    at java.net.DatagramSocket.<init>(DatagramSocket.java:271)
    at client.Client.main(Client.java:32)
java.net.BindException:地址已在使用中:无法绑定
位于java.net.DualStackPlainDatagramSocketImpl.socketBind(本机方法)
位于java.net.DualStackPlainDatagramSocketImpl.bind0(DualStackPlainDatagramSocketImpl.java:84)
位于java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:93)
位于java.net.DatagramSocket.bind(DatagramSocket.java:392)
在java.net.DatagramSocket(DatagramSocket.java:242)
位于java.net.DatagramSocket。(DatagramSocket.java:299)
在java.net.DatagramSocket(DatagramSocket.java:271)
位于client.client.main(client.java:32)

发生错误的原因是您试图将套接字绑定到的端口已在使用中。客户端和服务器都使用端口
7000

DatagramSocket sockets = new DatagramSocket(7000);

如果希望使用套接字从客户端向服务器发送/接收数据,请在服务器端使用

然后使用-它侦听与此套接字的连接并接受它

Accept
返回的套接字对象具有可以读取和写入的输入和输出流

客户端将只使用套接字对象

请参阅以获取示例


如果出于某种原因,您坚持使用DatagramSocket,请参见此示例

出现了什么确切错误?请查看您的端口号