【发布时间】:2023-03-23 23:49:01
【问题描述】:
我想开发客户端和服务器通信,我已经为客户端和服务器编写了一些代码,但是一旦客户端和服务器连接,就不需要一次又一次地重新连接。但是,在我当前的代码中,它们会一次又一次地重新连接。
-
InetAddress host = InetAddress.getLocalHost(); Socket s = new Socket(host.getHostName(), 4321);
第二行每次都会创建新的连接,这就是我要解决的问题(他们只需要连接一次)。
ClientClass.java
public class CientClass {
public static void main(String[] args)
{
System.out.println("CLIENT SITE");
while (true) {
try {
InetAddress host = InetAddress.getLocalHost();
Socket s = new Socket(host.getHostName(), 4321);
DataOutputStream dout = new DataOutputStream(s.getOutputStream());
Scanner sc = new Scanner(System.in);
System.out.println("Ener for server:");
String data = sc.next();
dout.writeUTF(data);
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
}
}
Serverclass.java
public class Serverclass {
public static void main(String[] args) {
System.out.println("SERVER SITE");
while (true) {
try {
ServerSocket ss = new ServerSocket(4321);
Socket s = ss.accept();
DataInputStream din = new DataInputStream(s.getInputStream());
String str = (String) din.readUTF();
System.out.println("message:" + str);
ss.close();
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
}
}
clientClass 从控制台读取命令并发送到服务器,但它不应在初始连接后继续重新连接。
在重启服务器的情况下,客户端应该自动连接,并且客户端应该能够向服务器发送命令。
我想我不需要更改服务器类代码。只需要更改clientClass代码。怎么样?
【问题讨论】:
-
您能重新表述一下您的问题吗?目前还不清楚你想做什么。你的代码也有点奇怪。为什么要创建包装在
while(true)循环中的客户端/服务器?这似乎没有意义。不要谈论你的套接字丢失的关闭...... -
是的,请再看一遍..
-
看看 L.Spillner 的回答,它回答得很好,甚至解释得很好?