c# - 套接字只读取断点设置

标签 c# winforms sockets

我正在编写一个套接字监听器并使用 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/

相关文章:

linux - 设置 linux socket - high priority 的效果是什么?

c# - C# 中反序列化 json 对象(可以是数组或单个对象)的最佳方法

C#数据库选择

c# - Winform 绑定(bind)下拉列表从字典将名称更改为友好名称

c# - winforms中的两种方式数据绑定(bind),在基类中实现的Inotifypropertychanged

c - 告诉客户端何时完成写入缓冲区

.net - SocketAsyncEventArgs "pooled byte[]"样式是否有助于减少内存需求?

c# - 将 asp.net 图表保存到文件

c# - ASP.NET C# TagBuilder SetInnerText 在空白处呈现 %20

c# - 获取滚动位置百分比