将多个文件从C#发送到C

将多个文件从C#发送到C,c#,c,wpf,file,C#,C,Wpf,File,我有一个wpf gui,我想上传文件并发送到C客户端。 我想发送3个文件,由于某些原因,其中1个文件正在发送和写入(但它在最后添加了8个空值,并删除了文件中的4个首字母) 在另外两种情况下,当我尝试接收尺寸时,会显示它们的尺寸为0 我已经在这个问题上纠结了一段时间,我变得很遗憾,因为我可能错过了一件小事,如果你们中的任何人能伸出援手,那将意味着很多!我真的想知道我的代码有什么问题 我把文件路径放在一个数组中,然后像这样在main中发送它 C#Main IPEndPoint-ipPoint=新的I

我有一个wpf gui,我想上传文件并发送到C客户端。 我想发送3个文件,由于某些原因,其中1个文件正在发送和写入(但它在最后添加了8个空值,并删除了文件中的4个首字母) 在另外两种情况下,当我尝试接收尺寸时,会显示它们的尺寸为0 我已经在这个问题上纠结了一段时间,我变得很遗憾,因为我可能错过了一件小事,如果你们中的任何人能伸出援手,那将意味着很多!我真的想知道我的代码有什么问题

我把文件路径放在一个数组中,然后像这样在main中发送它

C#Main

IPEndPoint-ipPoint=新的IPEndPoint(IPAddress.Parse(“127.0.0.1”),5555)//切换端口
Socket listenSocket=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp);
listenSocket.Bind(ipPoint);
listenSocket.Listen(1);
Socket clientSocket=listenSocket.Accept();
对于(int i=0;i<1;i++)
{
SendFile(clientSocket,filepath[i]);
}
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
发送文件(C侧)

publicstaticvoidsendfile(socketclientsocket,stringfilepath)
{
if(File.Exists(filePath))
{
FileInfo fi=新的FileInfo(filePath);
长文件大小=fi.Length;
字节[]预缓冲区;
使用(var memoryStream=new memoryStream())
{
使用(BinaryWriter=新的BinaryWriter(memoryStream))
{
writer.Write(文件大小);
}
preBuffer=memoryStream.ToArray();
字节[]fixedBuffer=新字节[4];
复制(preBuffer,0,fixedBuffer,0,4);
Console.WriteLine(位转换器.ToString(预缓冲));
Console.WriteLine(BitConverter.ToString(fixedBuffer));//修复了我在转换为数组时遇到的问题,它添加了4个无用的零。
clientSocket.Send(fixedBuffer);//发送大小
}
字节[]数据=新字节[4096];
使用(FileStream fs=newfilestream(filePath,FileMode.Open))
{
实际水头;
做
{
actualRead=fs.Read(数据,0,数据长度);
发送(数据);
文件大小-=实际读取;
}while(文件大小-filePath.Length>0);
}
}
其他的
{
Show(“程序文件丢失!lua/pcap/csv”);
}
}
C接收(由3个功能构建)

/*
============================================
常规:函数负责从客户端接收一定长度的数据
参数:sock-从中接收数据的客户端套接字
*buf-保存指向需要更新的缓冲区的指针
bufsize—缓冲区的长度
返回值:正确读取数据时返回TRUE
否则,如果存在套接字错误或未收到字节,则为FALSE。
============================================
*/
bool recv_原始(插座插座,空心*buf,内部bufsize)
{
无符号字符*pbuf=(无符号字符*)buf;
而(bufsize>0){
int num=recv(sock,pbuf,bufsize,0);

if(num)文件发送循环的结尾不应该是“}而(file_size>0);”用文件中的字节数初始化文件大小,然后在循环中删除实际发送的字节数。而且,这可能有点麻烦,但是考虑把while放置在循环的顶部而不是底部。然后它应该处理0字节文件。无论如何,尝试一下,看看你是否受益。文件长度。是一个长的(8字节),但您正在发送(4字节)。开头的四个字节很可能是文件的幻数。请检查:和