套接字服务器无法正常接收

时间:2013-08-06 04:32:33

标签: java sockets

我正在尝试创建套接字服务器,我通过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");
    }
}

1 个答案:

答案 0 :(得分:1)

您的Java程序是正确的。

我已尝试过您的代码,只是在System.out.printf("[%s]", inputLine);循环中添加了while作为第一行,以确保我从putty获得的内容。 我想你的问题是putty用来连接的协议。它适用于RAW。请参阅下面我使用的会话设置:

PUTTY session settings

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

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

相关问题