gpt4 book ai didi

java - 在java中将套接字消息打印到控制台

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:42 25 4
gpt4 key购买 nike

  1. 我是java初学者,正在学习套接字编程。我正在使用基本的聊天服务器套接字通信。我很难将服务器和客户端消息打印到控制台窗口。

  2. 当我设计聊天服务器窗口 UI 时,我也会实现这个概念,并将字符服务器交互消息更新到我的 UI。我想知道如何才能实现这一目标?

1 的代码
服务器.java

package ChApp;

import java.io.IOException;
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception {
Socket s;
ServerSocket server = new ServerSocket(3900);
while(true)
{

s = server.accept();
ServerHandl handle1 = new ServerHandl(s);
Thread t1= new Thread(handle1);
t1.start();
System.out.println("Connection Succesful...");
server.close();
}
}

}

Serverhandl.java

package ChApp;
import java.io.*;
import java.net.*;

public class ServerHandl implements Runnable {
Socket s= null;
BufferedReader read;
PrintWriter write;
String msg="Server is sending a sample msg";
public ServerHandl(Socket s)
{
this.s = s;

}
public void run()
{

try {
write = new PrintWriter(s.getOutputStream());
write.println(msg);
read = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(read.readLine());


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{

try {
read.close();
write.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


}

客户端.java

package ChApp;
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {

public static void main(String[] args) throws IOException {
Socket s= null;
BufferedReader read;
PrintWriter write = null;
String h;
StringBuilder sb = new StringBuilder();
String sendmsg="Reply from client";
s= new Socket("localhost",3900);
read = new BufferedReader(new InputStreamReader(s.getInputStream()));
while((h=read.readLine())!=null)
{

sb.append(h);

}
write = new PrintWriter(s.getOutputStream(),true);
write.write(sendmsg);
write.flush();
s.close();
read.close();
write.close();

}

}

最佳答案

您的客户端正在调用 readLine() 直到它返回 null,但您的服务器正在从连接中读取数据,因此尚未关闭它,因此 null 永远不会到达,因此您陷入了僵局。

从服务器读取一行行,然后发送响应,然后关闭套接字。让服务器在调用 readLine() 后关闭套接字。

关于java - 在java中将套接字消息打印到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722681/

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