【发布时间】:2015-12-15 02:57:16
【问题描述】:
我正在尝试让 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
【问题讨论】:
-
您应该在每个单词后添加一个空格。例如:
... conn.send("Hello") conn.send(" ") conn.send("World") ... -
这将解决空白问题,但不能解决输入没有移位的事实
-
扫描器类正在等待一个令牌(默认情况下它是一个以空格分隔的文本块),因此如果您想要这些令牌,您需要发送
"Hello Word "(注意结尾空格)。阅读java's Scanner class -
它在您退出服务器时起作用,因为这会终止连接并且扫描仪会看到 EOF。如果您执行
conn.shutdown(socket.SOCK_RDWR),它也可以工作,但连接将被关闭。
标签: java python sockets network-programming java.util.scanner