我正在编写一个简单的本地客户端-服务器程序,该程序应执行以下操作:
我遇到的问题是,从未检索到“ hello client1”消息,而该程序只是保持运行而不会引发任何异常或错误。我猜想它与阻止bufferedReader的readLine方法有关,但是我还没有找到解决该问题的合适方法。为了在本地运行程序(请参阅Main),我使用了serverThread和clientThread,也许这也可能是问题的一部分。
注意:在以下代码中,我在似乎引起问题的行上放置了一个注释块,其余代码运行正常:
服务器:
public class Serverside implements Runnable{
PrintStream out;
int port;
Serverside(int port){
out = new PrintStream(System.out);
this.port = port;
}
void start(){
try{
ServerSocket serverSocket = new ServerSocket(port);
Socket connSocket = serverSocket.accept();
BufferedReader clientInput = new BufferedReader(new InputStreamReader(connSocket.getInputStream()));
DataOutputStream clientOutput = new DataOutputStream(connSocket.getOutputStream());
String clientName = clientInput.readLine();
String reply = "Hello " + clientName + "\n";
//clientOutput.writeBytes(reply);
clientOutput.close();
clientInput.close();
connSocket.close();
serverSocket.close();
}catch(Exception e){
out.println("Server: An exception has been thrown: " + e.getMessage());
}
}
@Override
public void run() {
out.println("Server running");
start();
}
}
客户:
public class ClientSide implements Runnable {
String hostname;
String clientName;
int port;
public ClientSide(String name, int port) {
hostname = "localhost";
this.port = port;
clientName = name;
}
void start(){
try{
Socket connSocket = new Socket(hostname, port);
BufferedReader serverInput = new BufferedReader(new InputStreamReader(connSocket.getInputStream()));
DataOutputStream serverOutput = new DataOutputStream(connSocket.getOutputStream());
serverOutput.writeBytes(clientName);
//String reply = serverInput.readLine();
//System.out.println("Server says: " + reply);
serverOutput.close();
serverInput.close();
connSocket.close();
}catch(Exception e){
System.out.println("Client: An exception has been thrown: " + e.getStackTrace().toString());
}
}
@Override
public void run() {
System.out.println("Client-side running");
start();
}
}
主要的:
public class Main {
static final int PORT = 20000;
void start() {
Serverside server = new Serverside(PORT);
ClientSide client = new ClientSide("Elias",PORT);
Thread serverThread = new Thread(server);
Thread clientThread = new Thread(client);
clientThread.start();
serverThread.start();
}
public static void main(String[] args) {
new Main().start();
}
}
您正在阅读线路,但未发送线路。您需要在客户端名称中添加一个行终止符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句