分布式系统中的多线程客户端和服务器(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,请参见此示例出现了什么确切错误?请查看您的端口号