c#socket发送详细信息

时间:2015-07-19 17:43:35

标签: c# file sockets

我试图通过套接字发送文件,但我也想发送文件的名称。

这是发送代码:

        int count = 0;
    int size;
    private int SendVarData(Socket s, byte[] data)
    {
        total = 0;
        int size = data.Length;
        int dataleft = size;
        int sent;


        datasize = BitConverter.GetBytes(size);
        sent = s.Send(datasize);


        sent = s.Send(data, total, dataleft, SocketFlags.None);
        total += sent;
        dataleft -= sent;
        //  MessageBox.Show("D");

        return total;
    }

这是电话

       byte[] arr = File.ReadAllBytes(file);
        SendVarData(sc, arr);//sc is a socket ofcourse.

我想像我说的那样发送文件名。我应该在文件发送之前发送一次吗?还是有另一种有效的方式来发送它们?

这是接收代码:

private byte[] ReceiveVarData(Socket s)
    {
        int total = 0;
        int recv;
        byte[] datasize = new byte[4];

        recv = s.Receive(datasize, 0, 4, 0);
        size = BitConverter.ToInt32(datasize, 0);
        int dataleft = size;
        //MessageBox.Show(size.ToString());
        byte[] data = new byte[size];


        while (total < size)
        {
            recv = s.Receive(data, total, dataleft, 0);
            if (recv == 0)
            {
                break;
            }
            total += recv;
            dataleft -= recv;
        }
        return data;
    }

任何帮助都会得到解决。

1 个答案:

答案 0 :(得分:0)

我认为您是在文件之前还是之后发送它并不重要。您需要一个协议,例如,首先发送文件名长度,然后是文件名,然后是文件长度和文件本身,或者其他方式。在接收端,您现在可以区分消息 - 因为您知道每个块的长度(假设两个长度变量总是4字节整数)。