小编Nat*_*els的帖子

非常奇怪的问题通过C#中的套接字发送数据

我为这篇冗长的帖子道歉.我仍然尽可能小,同时仍然传达问题.

好的,这让我发疯了.我有一个客户端和一个服务器程序,都在C#中.服务器通过Socket.Send()将数据发送到客户端.客户端通过Socket.BeginReceive和Socket.Receive接收数据.我的伪协议如下:服务器发送一个双向(短)值,表示实际数据的长度,紧接着是实际数据.客户端异步读取前两个字节,将字节转换为short,并立即同步从套接字读取多个字节.

现在每隔几秒左右就可以正常工作一个周期,但是当我提高速度时,事情会变得奇怪.似乎客户端在尝试从两个字节长度读取时会随机读取实际数据.然后它尝试将这些任意两个字节转换为short,这会导致完全不正确的值,从而导致崩溃.以下代码来自我的程序,但修剪为仅显示重要的行.

用于发送数据的服务器端方法:

private static object myLock = new object();
private static bool sendData(Socket sock, String prefix, byte[] data)
{
    lock(myLock){
        try
        {
            // prefix is always a 4-bytes string
            // encoder is an ASCIIEncoding object    
            byte[] prefixBytes = encoder.GetBytes(prefix);
            short length = (short)(prefixBytes.Length + data.Length);

            sock.Send(BitConverter.GetBytes(length));
            sock.Send(prefixBytes);
            sock.Send(data);

            return true;
        } 
        catch(Exception e){/*blah blah blah*/}
    }
}
Run Code Online (Sandbox Code Playgroud)

用于接收数据的客户端方法:

private static object myLock = new object();
private void receiveData(IAsyncResult result)
{
    lock(myLock){
        byte[] buffer = new byte[1024];
        Socket sock …
Run Code Online (Sandbox Code Playgroud)

c# sockets arrays byte

7
推荐指数
1
解决办法
3245
查看次数

标签 统计

arrays ×1

byte ×1

c# ×1

sockets ×1