gpt4 book ai didi

java - 如何保持套接字连接直到服务器处理它?

转载 作者:行者123 更新时间:2023-12-01 12:02:07 25 4
gpt4 key购买 nike

我正在编写Socket程序,这里客户端通过Stream发送一个字符串,服务器处理它并写回客户端。我的问题是,服务器处理 String 后,它写回 Stream,但在客户端中它无法读取 Stream,它在 while: java.net.SocketException 中将其显示为 Exception :套接字关闭这是我的代码,

客户端,

  public void run() {
while (true) {
try {
// Open your connection to a server, at port 1231
s1 = new Socket("localhost", 1231);

OutputStream s1out = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(s1out);
InputStream in=s1.getInputStream();
DataInputStream dis=new DataInputStream(in);

String s = br.readLine();
dos.writeUTF(s);
dos.flush();
dos.close();

System.out.println(dis.readUTF());//it is the String from Server after processing
dis.close();

} catch (IOException ex) {
// Logger.getLogger(SimpleClient.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Exception in while: " + ex);
}
}

在服务器中

  public void run()
{


while(true){
try {

System.out.println("Waiting for connect to client");
s1=serverSocket.accept();


s1In = s1.getInputStream();
dis = new DataInputStream(s1In);

out=s1.getOutputStream();
dos=new DataOutputStream(out);

String clientData=dis.readUTF();

//processing task String

dos.writeUTF("Bus Registered Successfully");
dos.flush();

}
}

在这里,我无法在客户端读取总线注册成功。如何解决这个问题?

最佳答案

你的程序中有很多地方不对劲。但首先让我回答你的问题......你在写入流后关闭套接字......所以服务器抛出异常,只需在 dos 之后删除 dos.close(); .flush();。它将运行良好。

现在回到编程实践......

1) 服务器应该在 while(true) 循环中接受连接,然后创建一个新线程。因此以下语句不应该是 run 方法的一部分。

             System.out.println("Waiting for connect to client");
s1=serverSocket.accept();


s1In = s1.getInputStream();
dis = new DataInputStream(s1In);

out=s1.getOutputStream();
dos=new DataOutputStream(out);

2)客户端不需要run方法。因为每个新客户端都是一个新程序,有自己的变量套接字

关于java - 如何保持套接字连接直到服务器处理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com