相关疑难解决方法(0)

套接字缓冲它接收的数据

我有一个客户端.NET应用程序和一个服务器.NET应用程序,通过套接字连接.

客户端每500毫秒发送一个包含20个左右字符的字符串.

在我的本地开发机器上,这很好用,但是一旦客户端和服务器在两个不同的服务器上,服务器在发送时不会立即收到字符串.客户端仍然发送完美,我已经通过Wireshark证实了这一点.我还确认服务器确实每500毫秒收到一次字符串.

问题是,我等待消息的服务器应用程序实际上每20秒左右才会收到一条消息 - 然后它会从这20秒内收到所有内容.

我使用异步套接字,由于某种原因,回调不会每20秒调用一次.

AcceptCallback它建立连接和呼叫BeginReceive

handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
Run Code Online (Sandbox Code Playgroud)

这适用于我的本地计算机,但在我的生产服务器上,ReadCallback不会立即发生.

BufferSize设置为1024.我也尝试将其设置为10.一旦调用ReadCallback,它会一次从套接字读取多少数据,但这不是真正的问题.一旦它调用ReadCallback,其余的工作正常.

我正在使用微软异步服务器套接字示例,所以你可以看到我的ReadCallback方法是什么样的.

当数据到达服务器时,如何立即获得BeginReceive回调?

-

UPDATE

这已经解决了.这是因为服务器有一个单处理器和一个单核.添加另一个核心后,问题立即得到解决.现在,当呼叫进入服务器时,立即调用ReadCallback.

谢谢大家的建议!!

c# sockets

7
推荐指数
3
解决办法
2058
查看次数

当更多可用时,为什么套接字读取0个字节

我发现以下代码循环使用100%的CPU:

byte[] buffer = new byte[0x10000];
while (true) {
    if (socket.Poll (5000000, SelectMode.SelectRead) == false)
        continue;
    int available = socket.Available;
    if (available == 0)
        return;
    int read = socket.Receive (buffer);
    Console.WriteLine ("Read: " + read + " Available: " + available);
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Read: 0 Available: 1
Read: 0 Available: 1
Read: 0 Available: 1
Read: 0 Available: 1
Read: 0 Available: 1
...
Run Code Online (Sandbox Code Playgroud)

我期待socket.Receive方法读取剩余的字节但显然不会导致我的代码循环为100%.

正如jgauffin所建议的那样,文档中写道:

如果远程主机使用Shutdown方法关闭Socket连接,并且已收到所有可用数据,则Receive方法将立即完成并返回零 字节.

所以读取0是预期的,但只有在读取了所有数据之后,哪个socket.Available声称不是.

Socket.Available的文档仅提及抛出异常的已关闭连接.

我怎样才能确保读取最后一个字节? …

.net c# sockets

6
推荐指数
1
解决办法
1万
查看次数

Socket.BeginReceive:如果没有通过数据超时?

我正在做一个可变长度的消息接收,类似于此问题,其中消息的正文的长度在标头中指定,并且我异步读取循环中的正文,直到将其全部传输为止。

但是,由于网络的缘故,有时会显得太迟钝,为了保持连接的新鲜度,我想杀死套接字并重新连接。不幸的是,如果数据很慢并且随意返回时,异步beginreceive似乎不会真正返回。

什么是最适合测量速度的方法,以便在必要时可以断开连接?我想我可以将DateTime对象置于异步状态,也许做一些计算?

对于上下文,这是针对我与Arduino一起构建的wifi温度探头,该探头以突发方式发送数据,但是wifi连接在打算使用的地方确实很模糊。

c# network-programming asyncsocket

5
推荐指数
0
解决办法
93
查看次数

标签 统计

c# ×3

sockets ×2

.net ×1

asyncsocket ×1

network-programming ×1