客户端不会将数据发送到服务器

问题描述 投票:0回答:2

即使有这个非常基本的客户端 - 服务器应用程序,我也遇到问题客户端没有发送数据/服务器没有收到。我无法理解问题出在哪里。我甚至开始认为我对套接字一无所知。

这是服务器代码:

public class Server
{
public static void main(String args[])
{
    try{
        ServerSocket serverSocket = new ServerSocket(3000);

        Socket socket = serverSocket.accept();

        System.out.println("Client connected: "+socket.getInetAddress.toString());

        Scanner scanner = new Scanner(socket.getInputStream());

        while(true)
        {
            System.out.println(scanner.nextLine());
        }
    }catch(IOException e)
    {
        System.out.println("error");
    }
}
}

这是客户端代码:

public class Client
{
public static void main(String args[])
{
    Socket socket;
    PrintWriter printWriter;


    try {
        socket = new Socket("127.0.0.1", 3000);
        printWriter = new PrintWriter(socket.getOutputStream(), true);

        while(true)
        {
            printWriter.write("frejwnnnnnnnnnnnnnnnnnnnnnnnnosfmxdawehtcielwhctowhg,vort,hyvorjtv,h");
            printWriter.flush();
        }

    }catch(IOException e)
    {
        System.out.print("error\n");
    }

}
}

如果我在同一台机器上运行,服务器打印正确“客户端连接.....”,但然后不再打印。

问题是什么?

java sockets networking
2个回答
1
投票

服务器读取下一行。客户端不发送任何行结束。因此服务器不可能知道该行应该结束,并阻塞直到它在流中找到EOL。或者直到客户端关闭其套接字。


0
投票

在客户端代码中,您使用PrintWriter装饰输出流,因此您可以使用println。更换

printWriter.write("frejwnnnnn...rjtv,h");
printWriter.flush();

通过:

printWriter.println("frejwnnnnn...rjtv,h");

因为请求autoflush(在PrintWriter构造函数中为true),刷新是没用的。

在服务器代码中,您可以使用BufferedReader装饰器而不是Scanner:

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine;
while ((inputLine = br.readLine()) != null) {
    System.out.println(inputLine);
}
© www.soinside.com 2019 - 2024. All rights reserved.