0

我正在尝试制作一个套接字服务器,我正在通过腻子连接到该服务器。每当我输入“hi”时,它会说“no”而不是“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");
    }
}
4

1 回答 1

2

您的 Java 程序是正确的。

我已经尝试了您的代码,只是将其添加System.out.printf("[%s]", inputLine);while循环中的第一行,以确保我从腻子中得到什么。我猜你的问题是腻子用来连接的协议。它对我来说与RAW一起工作。请参阅下面我使用的会话设置:

PUTTY 会话设置

编辑:根据您的评论,我为一个简单的客户端添加了一些代码,该客户端从控制台读取该行,将其发送到服务器并将回显打印回控制台。

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”。

于 2013-08-06T06:14:07.337 回答