Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 TCP连接套接字。getInputStream()_Java_Sockets_Tcp - Fatal编程技术网

Java TCP连接套接字。getInputStream()

Java TCP连接套接字。getInputStream(),java,sockets,tcp,Java,Sockets,Tcp,我创建了一个应用程序,它通过两种方式与给定的端口和传输数据建立连接。但是我在从服务器读取数据时遇到了问题 try{ Socket skt = new Socket(127.98.68.11, 1111); // connecting to this to get data String message = "some test message"; if(option.equalsIgnoreCase("send")){ OutputStream

我创建了一个应用程序,它通过两种方式与给定的端口和传输数据建立连接。但是我在从服务器读取数据时遇到了问题

try{

    Socket skt = new Socket(127.98.68.11, 1111); // connecting to this to get data

    String message = "some test message";

    if(option.equalsIgnoreCase("send")){

         OutputStream outToServer = skt.getOutputStream();
          outToServer.write(message); // this is working, message stored on server-side
    }else if(option.equalsIgnoreCase("receive")){
          BufferedReader in = new BufferedReader (new InputStreamReader(sit.getInputStream()));

          String fromServer = in.readLine();
          System.Out.Println(fromServer);
    }

}catch(IOException io){
   io.printStackTrace();
}
在这个项目中,一切都按预期进行。除了在.readline()中


我试着在调试模式下运行这个程序,当编译器到达这个命令时。是什么也没做,我也看不到光标,这可能是因为您试图在.readLine()中执行一个
,这要求服务器终止“receive”命令,该命令用换行符发送给客户端。。“\n”或“\r\n”会发生什么情况?听起来您的服务器没有向您发送线路,所以请调试服务器上发生的事情(甚至使用Wireshark在TCP流上)。您的
BufferedReader
从名为
sit
的变量中获取输入流,但您的
Socket
是以
skt
的名称声明的。这是打字错误吗?没有引号的
equalsIgnoreCase(receive)
呢?这些打字错误不在实际代码中。我的问题是我没有得到数据流,甚至没有抛出任何异常/错误。程序持续运行数小时并在不打印预期数据流的情况下终止。read()是否获取完整的数据字符串?你能告诉我如何获取数据吗。因为程序正在终止任何读/读行。如何获取此工作???
in.read()
将仅检索单个字符。。您需要使用
in.read(char[],int,int)
方法读取char缓冲区数组。继续读取,直到得到-1,然后将缓冲区数组转换为字符串。。然后检查此字符串是否为.equalsIgnoreCase(“接收”)