我正在尝试创建套接字服务器,我通过putty连接到此服务器。每当我输入“hi”时,它会说“不”而不是“hi”,我希望它能做到。我在一个java网站上发现了这个。如果你能告诉我我做错了什么就会很棒。谢谢!
int port = 12345;
ServerSocket sock = new ServerSocket(port);
System.out.println("Server now active on port: " + port);
Socket link = sock.accept();
System.out.println("Interface accepted request, IP: " + link.getInetAddress());
BufferedReader input = new BufferedReader(new InputStreamReader(link.getInputStream()));
PrintWriter output = new PrintWriter(link.getOutputStream(), true);
output.println("ISEEYOU");
String inputLine;
Thread.sleep(1500);
while((inputLine = input.readLine()) != null) {
if(inputLine.equals("hi")) {
output.println("hi");
}else{
output.println("no");
}
}
答案 0 :(得分:1)
您的Java程序是正确的。
我已尝试过您的代码,只是在System.out.printf("[%s]", inputLine);
循环中添加了while
作为第一行,以确保我从putty获得的内容。
我想你的问题是putty用来连接的协议。它适用于RAW。请参阅下面我使用的会话设置:
编辑:
根据您的评论,我为一个简单的客户端添加了一些代码,它从控制台读取该行,将其发送到服务器并将回显打印回控制台。
public void Client() throws IOException {
// Client that closes the communication when the user types "quit"
Socket socket = new Socket("localhost", 8080);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
BufferedReader user = new BufferedReader(new InputStreamReader(System.in));
String line;
while(!(line = user.readLine()).equals("quit")) {
ps.println(line); // Write to server
System.out.println(reader.readLine()); // Receive echo
}
socket.shutdownOutput(); // Send EOF to server
socket.close();
}
相应的服务器如下所示:
public void server() throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
Socket socket = serverSocket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
// Just read a line and echo it till EOF
String line;
while((line = reader.readLine()) != null) ps.println(line);
}
如果您的计算机上已绑定8080,则可能需要更改此处使用的端口。此外,您可能希望让服务器在另一台计算机上运行,然后运行客户端。在这种情况下,您需要更改“localhost”。