Java套接字无法正确显示收到的输入
我正在尝试获取一个Java客户端程序来接收来自服务器的输入。但是,代码无法获取输入并将其打印出来。很好。 问题是接收到的输入没有打印到控制台。 下面是创建套接字的部分Java套接字无法正确显示收到的输入,java,python,sockets,network-programming,java.util.scanner,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 +
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");
}
}
此代码在客户端的输出应为
-->你好
-->世界
应该打印Hello,然后打印World,然后等待更多输入。但是,在服务器关闭之前,不会显示输出。服务器关闭时,将显示python文档中的HelloWorld,用于: 应用程序负责检查所有数据是否已发送;如果仅传输了部分数据,则应用程序需要尝试传输其余数据 如果您不想担心检查数据是否已发送,则使用此选项,因为它将继续尝试发送数据,直到所有数据都已发送或出现错误为止
Scanner
将根据分隔符(我认为默认情况下是空白)标记数据。将仅在达到指定的分隔符字符时返回数据:
完整标记的前面和后面是与分隔符模式匹配的输入
确保在接收数据时考虑到这一点(您发送的数据需要指定分隔符,即扫描仪的分隔符)。您可以通过或更改分隔符。您应该在每个单词后添加空格,。例:
。。。conn.send(“Hello”)conn.send(“”)conn.send(“World”)…
这将解决空白问题,但不是输入未被替换的事实scanner类正在等待标记(默认情况下,它是一个以空白分隔的文本块),因此如果需要这些标记,则需要发送“Hello Word”
(请注意结尾空格)。当您退出服务器时,Read-up就可以工作了,因为这样会终止连接,扫描程序会看到EOF。如果您执行了conn.shutdown(socket.sockrdwr)
操作,它也会工作,但随后连接会关闭。这两个操作我都很累,直到服务器端套接字关闭后,它才打印输出。我现在明白您的意思了。它终于成功了。谢谢你
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")