vb.net
有效,但在
c#
顺便说一句
BUFFER_SIZE
等于
2048
Byte
Dim bytesRcvd As Integer = 0
Dim byteSendBuffer As Byte() = New Byte(BUFFER_SIZE - 1) {}
Dim byteReceiveBuffer As Byte() = New Byte(BUFFER_SIZE - 1) {}
Dim receiveMessage As String = Nothing
byteSendBuffer = Encoding.ASCII.GetBytes(sendMessage)
Dim client As System.Net.Sockets.TcpClient = Nothing
Dim netStream As System.Net.Sockets.NetworkStream = Nothing
client = New System.Net.Sockets.TcpClient("localhost", 9060)
netStream = client.GetStream()
netStream.Write(byteSendBuffer, 0, byteSendBuffer.Length)
bytesRcvd = netStream.Read(byteReceiveBuffer, 0, BUFFER_SIZE)
receiveMessage = Encoding.ASCII.GetString(byteReceiveBuffer, 0, bytesRcvd)
netStream.Close()
client.Close()
C#:
int bytesRcvd = 0;
var byteSendBuffer = new Byte[BUFFER_SIZE - 1];
var byteReceiveBuffer = new Byte[BUFFER_SIZE - 1];
string receiveMessage = null;
byteSendBuffer = Encoding.ASCII.GetBytes(sendMessage);
System.Net.Sockets.TcpClient client = null;
System.Net.Sockets.NetworkStream netStream = null;
client = new System.Net.Sockets.TcpClient("localhost", 9060);
netStream = client.GetStream();
netStream.Write(byteSendBuffer, 0, byteSendBuffer.Length);
bytesRcvd = netStream.Read(byteReceiveBuffer, 0, BUFFER_SIZE);
receiveMessage = Encoding.ASCII.GetString(byteReceiveBuffer, 0, bytesRcvd);
netStream.Close();
client.Close();
这发生在
netStream.read
啊,是的,所以
字节
处理方式不同。。关注c版本,改变:
var byteSendBuffer = new Byte[BUFFER_SIZE - 1];
var byteReceiveBuffer = new Byte[BUFFER_SIZE - 1];
为此:
var byteSendBuffer = new Byte[BUFFER_SIZE];
var byteReceiveBuffer = new Byte[BUFFER_SIZE];
netStream.read
我试着用以下材料包装:
if(netStream.CanRead()) { ... }
没用,还挂着。
这绝对令人沮丧。我已经尝试了许多建议配置的例子。在新的
c#
vb
项目仅用于TcpClient命令。不管我做什么,它都会无限期地存在
read
,但与
vb
.
好吧,所有这些麻烦和有用的建议,结果证明这是处理小细节的重大巧合之一,就像在另一端的监听服务中,我没有接触到的一样。返回要发送给侦听器的消息的过程返回了不正确的消息,侦听器没有响应数据,只是超时了。如此微小的细节(如几个字符),以至于很难发现。