我正在编写一个套接字监听器并使用 SocketTest 对其进行测试,它仅在设置断点时读取。它连接有或没有断点。我试着在这段时间内添加了一个 sleep (无限,因为它在它自己的线程上)。
有了断点,它每次都能完美运行,这让我认为这是某种时间或缓冲区问题,我可以使用一些帮助来查明原因。异常 block 是空的(我刚刚编写了代码)并将被添加到,但它们不会被捕获,所以这不是异常问题。这是代码:
public static void doSocket()
{
TcpListener serverSocket = new TcpListener(Globals.foxProAddress, Globals.foxProPort);
TcpClient clientSocket = default(TcpClient);
try
{
serverSocket.Start();
}
catch (Exception e) { }
clientSocket = serverSocket.AcceptTcpClient();
while (true)
{
try
{
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[100025];
networkStream.Read(bytesFrom, 0, bytesFrom.Length);
string dataFromFoxPro = System.Text.Encoding.ASCII.GetString(bytesFrom);
if (!dataFromFoxPro.Equals(""))
{
Payments.startTransaction(dataFromFoxPro);
}
}
catch (Exception e) { }
}
}
最佳答案
检查Read() [MSDN]的返回值:
If no data is available for reading, the Read method returns 0.
设置断点后,数据更有可能同时到达。
您还应该传递索引 (0
) 和读入 GetString() [MSDN] 的字节数.
我还将 clientSocket.GetStream();
移到循环之外,只是为了向读者表明您希望在整个循环期间保持流。否则有人会认为缺少 Dispose()
,这会破坏流。
关于c# - 套接字只读取断点设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31550172/