我试图通过套接字发送文件,但我也想发送文件的名称。
这是发送代码:
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;
}
任何帮助都会得到解决。
答案 0 :(得分:0)
我认为您是在文件之前还是之后发送它并不重要。您需要一个协议,例如,首先发送文件名长度,然后是文件名,然后是文件长度和文件本身,或者其他方式。在接收端,您现在可以区分消息 - 因为您知道每个块的长度(假设两个长度变量总是4字节整数)。