Java TCP客户端-发送和接收响应
我正在连接到一个远程TCP侦听器,该侦听器接收一个字符串,并用响应进行响应 从我的Windows8手机应用程序到Java Jar。Jar正在接收消息,但Windows 8 Phone应用程序没有收到响应 C代码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
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");
}