Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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客户端-发送和接收响应_Java_C#_Tcp_Tcpclient_Tcplistener - Fatal编程技术网

Java TCP客户端-发送和接收响应

Java TCP客户端-发送和接收响应,java,c#,tcp,tcpclient,tcplistener,Java,C#,Tcp,Tcpclient,Tcplistener,我正在连接到一个远程TCP侦听器,该侦听器接收一个字符串,并用响应进行响应 从我的Windows8手机应用程序到Java Jar。Jar正在接收消息,但Windows 8 Phone应用程序没有收到响应 C代码 outputClient.Connect (/IP ADDRESS/, /Port/); using (Socket sock = outputClient.Client) { sock.Send (UTF8Encoding.ASCII.GetB

我正在连接到一个远程TCP侦听器,该侦听器接收一个字符串,并用响应进行响应

从我的Windows8手机应用程序到Java Jar。Jar正在接收消息,但Windows 8 Phone应用程序没有收到响应

C代码

outputClient.Connect (/IP ADDRESS/, /Port/);

        using (Socket sock = outputClient.Client) {
            sock.Send (UTF8Encoding.ASCII.GetBytes (broadcastMessage));

            var response = new byte[100];

            sock.Receive (response);
            var str = Encoding.ASCII.GetString (response).Replace ("\0", "");
            Console.WriteLine ("[RECV] {0}", str);
        } <-- JAVA CODE DOESN'T GET HIT UNTIL THIS LINE IS COMPLETED

再做一点解释:JAVA代码在这一行完成之前不会被命中,这意味着套接字似乎在使用socket sock=outputClient.Client之前不会被发送

我将C代码替换为:

using (TcpClient client = new TcpClient (/IP ADDRESS/, /PORT/))
        using (NetworkStream stream = client.GetStream ())
        using (StreamReader reader = new StreamReader (stream))
        using (StreamWriter writer = new StreamWriter (stream)) {
            writer.AutoFlush = true;

            foreach (string lineToSend in linesToSend) {
                Console.WriteLine ("Sending to server: {0}", lineToSend);
                writer.WriteLine (lineToSend);
                string lineWeRead = reader.ReadLine ();
                Console.WriteLine ("Received from server: {0}", lineWeRead);
                Thread.Sleep (2000); // just for effect
            }
            Console.WriteLine ("Client is disconnecting from server");
        }

这意味着什么:直到这一行完成,JAVA代码才被命中?如果此时没有执行Java代码,您的C程序如何接收任何数据?为什么你的问题似乎表明C接收没有完成?这个问题需要做大量的清理,这样才有意义。就发布的C代码而言,您犯的一个主要错误是没有检查接收的字节数。更重要的是,如果您使用的是TcpClient,那么为什么不从中获取NetworkStream并封装在StreamReader中(如Java代码中所示)?我做了一个快速编辑以进一步解释它。抱歉,这没有帮助。除非将套接字设置为非阻塞,否则在接收到某些数据之前无法访问using块的右括号,而在发送某些数据之前无法访问using块的右括号。Java端不可能在到达using语句的结束块之前不发送;它发送的很好,如果不是,它只是挂起。那么当sock.receiverresponse在那里时,接收到什么数据?
using (TcpClient client = new TcpClient (/IP ADDRESS/, /PORT/))
        using (NetworkStream stream = client.GetStream ())
        using (StreamReader reader = new StreamReader (stream))
        using (StreamWriter writer = new StreamWriter (stream)) {
            writer.AutoFlush = true;

            foreach (string lineToSend in linesToSend) {
                Console.WriteLine ("Sending to server: {0}", lineToSend);
                writer.WriteLine (lineToSend);
                string lineWeRead = reader.ReadLine ();
                Console.WriteLine ("Received from server: {0}", lineWeRead);
                Thread.Sleep (2000); // just for effect
            }
            Console.WriteLine ("Client is disconnecting from server");
        }