Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 套接字不在while循环中发送数据_Java_Sockets_Networking - Fatal编程技术网

Java 套接字不在while循环中发送数据

Java 套接字不在while循环中发送数据,java,sockets,networking,Java,Sockets,Networking,我正在尝试进行简单的网络通信,其中客户端向服务器发送用户输入字符串,然后服务器向控制台显示。 当我只发送一个字符串时,它可以正常工作,但只要我将用户输入代码打包并在while循环中发送代码,服务器就不会收到任何内容 服务器: ServerSocket-ServerSocket=null; 试一试{ serverSocket=新的serverSocket(端口); System.out.println(“服务器现在托管在端口”+端口上); sockets=serverSocket.accept()

我正在尝试进行简单的网络通信,其中客户端向服务器发送用户输入字符串,然后服务器向控制台显示。 当我只发送一个字符串时,它可以正常工作,但只要我将用户输入代码打包并在while循环中发送代码,服务器就不会收到任何内容

服务器:

ServerSocket-ServerSocket=null;
试一试{
serverSocket=新的serverSocket(端口);
System.out.println(“服务器现在托管在端口”+端口上);
sockets=serverSocket.accept();
System.out.println(“客户端已连接!”);
BufferedInputStream bis=新的BufferedInputStream(s.getInputStream());
BufferedOutputStream bos=新的BufferedOutputStream(s.getOutputStream());
虽然(正确){
//接收
int数据;
字符串inString=“”;
而((data=bis.read())!=-1){
inString+=(char)数据;
}
System.out.println(“从机:+inString”);
}
}捕获(IOE异常){
//TODO自动生成的捕捉块
System.out.println(“港口开发利用”);
}最后{
试一试{
serverSocket.close();
System.out.println(“服务器关闭”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
System.out.println(“无法关闭端口”+端口);
}
}
客户:

Scanner sc=新扫描仪(System.in);
套接字s=null;
试一试{
s=新插座(“127.0.0.1”,端口);
BufferedInputStream bis=新的BufferedInputStream(s.getInputStream());
BufferedOutputStream bos=新的BufferedOutputStream(s.getOutputStream());
System.out.println(“连接已建立!”);
while(true){//如果没有这个while循环,它工作得很好
字符串send=“”;
系统输出打印(“>>”);
send=sc.nextLine();
写入(send.getBytes());
bos.flush();
}
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
System.out.println(“无法连接”);;
}
最后{
试一试{
s、 close();
System.out.println(“闭合插座”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
System.out.println(“无法关闭连接”);;
}
}
System.out.println(“客户端结束”);
}
我希望服务器在提交时写入它从套接字读取的任何数据。 但它什么也没做。
我不确定问题是来自服务器还是客户端。

问题在于您的
而((data=bis.read())!=-1){
代码

它一直循环,直到收到EOS
-1

当您没有客户端循环时,您的流将关闭,允许发送
-1
,但当您有循环时则不允许。请尝试使用服务器循环打印,如下所示

while((data=bis.read()) != -1){
   inString += (char)data;

   if (((char)data) == '\n') {
       System.out.println("SLAVE : " + inString);   
       inString = "";
   }
}

去掉外部
while(true)
循环。它没有任何作用。一旦你从输入流中读取了-1,就再也不会有任何输入了。我无法理解你的第一段或第二段。是的,这很有效。(因为某些原因,现在我必须在构建输入字符串时添加'\n'。我认为sc.nextLine()但是我明白为什么我最初的尝试没有成功。我应该查看文件输入/输出。我从来没有花时间这样做。非常感谢。
nextLine
将剥离CRLF