Java套接字无法正确显示收到的输入

标签 java python sockets network-programming java.util.scanner

我正在尝试让 Java 客户端程序接收来自服务器的输入。但是代码无法获取输入并将其打印出来。它编译得很好。 问题是接收到的输入没有打印到控制台。 这是创建套接字的部分

Socket ss = new Socket(host,port);
String input;
Scanner in;
in = new Scanner(ss.getInputStream());
while(true)
{
    input = in.next();
    System.out.print(input + "\n");
    if("quit".equalsIgnoreCase(input));
        {
            in.close();
            ss.close();
            return;
        }
}

这是我所有的代码

import java.util.*;
import java.net.*;
import java.io.*;

public class connect 
{
    static int port;
    static String host;
    public static void start(String host, int port)
    {
        while(true)
        {
        try 
        {
            Socket ss = new Socket(host,port);
            String input;
            Scanner in;
            in = new Scanner(ss.getInputStream());
            while(true)
            {
                input = in.next();
                System.out.print(input + "\n");
                if("quit".equalsIgnoreCase(input));
                {
                    in.close();
                    ss.close();
                    return;
                }
            }
        } 
        catch (UnknownHostException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
    }
    public static void main(String[] args)
    {
        String check;
        do
        {
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        System.out.println("Hello, welcome to the client");
        String banner = "-";
        int x = 0;

        while(x<60)
        {
            banner += "-";
            x++;
        }
        System.out.println(banner);
        System.out.print("\n\nPlease Enter the ip address to connect to\n>>");
        host = sc.next();
        System.out.println("We are connecting to " + host);
        System.out.print("\n" + banner + "\nEnter the port\n>>");
        port = sc.nextInt();
        System.out.println("Connecting to\nhost->" + host + "\nport->" + port);
        System.out.println("Enter 'Done' to continue, any to reset");
        check = sc.next();
        }while(!"Done".equals(check));
        start(host,port);
        System.out.println("Finished");
    }
}

服务器是用python做的,只是为了测试一下。这是python代码

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('',443))
s.listen(1)
conn,addr=s.accept()
conn.send("Hello")
conn.send("World")

这段代码在客户端的输出应该是

-->你好

-->世界

应该打印 Hello 然后打印 World 然后等待更多输入。但是,在服务器关闭之前不会显示输出。服务器关闭时显示 HelloWorld

最佳答案

来自 send 的 python 文档:

Applications are responsible for checking that all data has been sent; if only some of the data was transmitted, the application needs to attempt delivery of the remaining data.

使用sendall如果您不想担心检查数据是否已发送,因为它会继续尝试传递数据,直到所有数据都已传递或直到发生错误。

Scanner 将根据分隔符(我相信默认情况下是一个空格)对数据进行标记。 Scanner#next()只有达到指定的分隔符才会返回数据:

A complete token is preceded and followed by input that matches the delimiter pattern.

确保在接收数据时考虑到这一点(您发送的数据需要在某处指定分隔符,用于扫描仪的分隔符)。您可以通过 Scanner#useDelimiter(String) 更改分隔符或 Scanner#useDelimiter(Pattern)

关于Java套接字无法正确显示收到的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34280388/

相关文章:

java - 从java服务器获取pdf页面,并嵌入到现有的html中

java - 从列表 <Map<String,Object>> 创建 HashMap<String,Map> 给出 java.lang.ClassCastException

python - 如何在 seaborn 中获得 2 个独立的地 block ?

Python 2.7 以 .csv 格式导出数据

javascript - 用户收到超过 1 个来自 Node.js 的通知

java - 在模拟器上运行但不能在设备上运行的 Android 套接字应用程序

java - 使用 java 给定 ip 地址访问端口 445 上的远程系统文件

java - Android AlertDialog.Builder 方法在传入 getActivity() 时给出错误

java - 当LinkedList是用户定义对象类型时,我们如何在java中迭代LinkedList?

python - Pandas - 根据其他列中的值将数据添加到列