gpt4 book ai didi

java - 服务器可以向客户端发送消息,但无法接收客户端的消息

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

我有一个客户端服务器程序,其中serverscoket将接受来自客户端的连接,并且客户端可以从服务器接收消息,但反之则不然。客户:

public class ChatClient {

private final String serverName;
private final int serverPort;
private Socket socket;
private OutputStream serverOut;
private InputStream serverIn;
private BufferedReader bufferedInputStream;
//private ArrayList<UserStatusListener> userListners = new ArrayList<UserStatusListener>();


private ChatClient(String serverName, int serverPort) {
super();
this.serverName = serverName;
this.serverPort = serverPort;
}


public static void main(String[] args) throws IOException {

ChatClient client = new ChatClient("localhost", 8818);

// Make sure serverboot is running and listenig first
if (! client.connect()) {
System.out.println("Connection Failed. Is ServerBoot running/listening?");
}else {
System.out.println("Connection succesful");
client.login("guest");
}

}


private boolean connect() {
// TODO Auto-generated method stub
try {
this.socket = new Socket(serverName, serverPort);

// get streams
this.serverOut = socket.getOutputStream();
this.serverIn = socket.getInputStream();
this.bufferedInputStream = new BufferedReader(new InputStreamReader(serverIn));

return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}

}

private void login (String login) throws IOException {

// send login to server
try {

String serverResponse = bufferedInputStream.readLine();
System.out.println("Server response: " + serverResponse);

while (bufferedInputStream.readLine() != null) {
System.out.println(bufferedInputStream.readLine());
}
String send = "Login : " + login;
serverOut.write(send.getBytes());


} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

来自服务器的片段:

 try {
ServerSocket serverSocket = new ServerSocket(serverPortNumber);
while (true) {
// Listen for incoming connections and craete connection with accept
System.out.println("Waiting for client connection.... on localhost port " + serverPortNumber
+ ". \n Client connect via netcat localhost 8818");

Socket clientSocket = serverSocket.accept();// returns a client Socket object
System.out.println("Conenction established with " + clientSocket);


// Each new connection will be handled on a new thread and can run concurrenlty
ManageMultipleConnections multipleConnections = new ManageMultipleConnections(this, clientSocket);
clientList.add(multipleConnections);
multipleConnections.start();
}

//获取客户端套接字输入输出流

clientInput = clientSocket.getInputStream();
clientoutput = clientSocket.getOutputStream();

//写入客户端套接字

clientoutput.write((message).getBytes());

//尝试从客户端读取数据,但我们从未收到任何消息

BufferedReader br = new BufferedReader(new InputStreamReader(clientInput, ENCODING));
String inputLine;
String returnMessage;

String msg = br.readLine();
System.out.println(br.readLine());

while ((inputLine = br.readLine()) != null && inputLine != "") {....do stuff

欢迎任何意见。

最佳答案

经过一周尝试几乎所有可能的解决方案后,我发现在客户端通过输出流发送到服务器的每条消息中附加回车符和换行符就可以解决问题。

private static final String CRLF = "\r\n"; // newline

try {

outputStream.write((text + CRLF).getBytes());

outputStream.flush();

} catch (IOException e) {

e.printstacktrace();

}

我不确定为什么这会起作用,所以任何能够阐明这一点的人都会很棒。我在 Windows 10 操作系统上的 eclipse 中使用 java swing。

关于java - 服务器可以向客户端发送消息,但无法接收客户端的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59296086/

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