Socket使用线程循环发送文件解决办法
Socket使用线程循环发送文件
在使用线程循环发送文件的过程中,客户端总会报 “目标数组的长度不足,无法复制集合中的所有项。请检查数组索引和长度”这个错误,但是在单独发送同一文件的时候并没有出现这种错误。请问大神们对于循环重复发送同一文件的事情是怎么解决的。
发送端部分代码如下:
接收端部分代码如下:
在使用线程循环发送文件的过程中,客户端总会报 “目标数组的长度不足,无法复制集合中的所有项。请检查数组索引和长度”这个错误,但是在单独发送同一文件的时候并没有出现这种错误。请问大神们对于循环重复发送同一文件的事情是怎么解决的。
发送端部分代码如下:
private void btnSendFile_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
if (clientSocket == null)
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(IPAddress.Parse("10.108.86.244"), 5000);
NetworkStream netStream = new NetworkStream(clientSocket);
tcpPacketServiceClient = new NetPacketTcpService(netStream);
}
while(true)
{
//在新的线程中完成文件发送
Thread thread = new Thread(delegate() //采用C#2.0匿名方法语法
{
tcpPacketServiceClient.SendFile(fd.FileName);
Invoke(new UpdateViewWithMsgHandler(UpdateView), "我发送了文件:" + new FileInfo(fd.FileName).Name);
//在窗口界面所在的线程运行委托指向的方法,避免跨线程访问UI问题
});
thread.IsBackground = true;
thread.Start();
Thread.Sleep(100);
if (thread.IsAlive)
{
thread.Abort();
}
}
}
接收端部分代码如下:
NetFile f = tcpPacketServiceSvr.ParseFile((Byte[])packet.Data);
msglist += "\r\n接收了对方发送的文件:"+f.FileName;
FileStream fs = null;
try
{
string fname = Application.StartupPath+"\\"+f.FileName;
fs = new FileStream(fname, FileMode.Create);