gpt4 book ai didi

Java网络客户端只发送一条消息

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

我正在学习Java,并且正在编写一个示例客户端-服务器应用程序sokcket 连接 正常,一切正常,直到客户端应用程序 发出第二条消息。它无法到达服务器。如果我启动另一个客户端,它也会在第一条消息处成功,在第二条消息处失败。

有人有想法吗?提前致谢!

服务器代码:

package networking;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

private static Socket socket;

public static void main(String[] args) {
try {

int port = 25000;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server Started and listening to the port 25000");

//Server is running always. This is done using this while(true) loop
while (true) {
//Reading the message from the client
socket = serverSocket.accept();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String incomingMessage = br.readLine();
System.out.println("((( " + incomingMessage);

String returnMessage = incomingMessage;

//Sending the response back to the client.
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(returnMessage + "\n");
bw.flush();
System.out.println("))) " + returnMessage);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (Exception e) {
}
}
}
}

还有客户端

package networking;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Client {

private static Socket socket;

public static void main(String args[]) {
try {
String host = "localhost";
int port = 25000;
InetAddress address = InetAddress.getByName(host);
socket = new Socket(address, port);

//Send the message to the server
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);

BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

String message = "";
/*
while(!message.equals("q")) {

System.out.print("Message: ");
message = console.readLine();
bw.write(message + "\n");
bw.flush();
System.out.println("))) " + message);
//Get the return message from the server
String incomingMessage = br.readLine();
System.out.println("((( " + incomingMessage);
}
*/
for (int i = 0; i < 10; i++) {
bw.write(i + "\n");
bw.flush();
System.out.println("))) " + i);
String incomingMessage = br.readLine();
System.out.println("((( " + incomingMessage);
}
} catch (Exception exception) {
exception.printStackTrace();
} finally {
//Closing the socket
try {
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

}

最佳答案

您的 while 在服务器代码中放错了位置,实际上您需要 2 个 while 循环:

  • 用于接受新客户的
  • 用于由客户端管理多条消息

在伪代码中,它为您提供:

while (true):
accept new client
while (client connected):
read message from client
write back message to client
close client socket

如果您想使用线程,那么您必须将内部 while 循环任务委托(delegate)给新线程。

注意:accept 会阻塞,直到有新客户端到来。这就是为什么客户端只能发送一条消息的原因。

关于Java网络客户端只发送一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47853328/

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