网上找了现成的代码改成了多个文件传输。可是改到多台电脑一起传输的时候就有了问题。能不能帮我看一下。
private void StartSend()
{
string ips = "192.168.0.22|192.168.0.13";
string[] s = ips.Split(new char[]{'|'});
for(int kkk=0;kkk<s.Length;kkk++)
{
label13.Text = kkk.ToString();
string names = textBox1.Text;
string[] txts = names.Split( new char[]{'|'});
int len = txts.Length-1;
for(int k=0; k<len;k++)
{
//创建一个文件对象
//FileInfo EzoneFile=new FileInfo(this.textBox1.Text);
FileInfo EzoneFile=new FileInfo(txts[k]);
//打开文件流
FileStream EzoneStream=EzoneFile.OpenRead();
//包的大小
int PacketSize=int.Parse(this.textBox6.Text);
//包的数量
int PacketCount=(int)(EzoneStream.Length/((long)PacketSize));
this.textBox8.Text=PacketCount.ToString();
this.progressBar1.Maximum=PacketCount;
//最后一个包的大小
int LastDataPacket=(int)(EzoneStream.Length-((long)(PacketSize*PacketCount)));
this.textBox9.Text=LastDataPacket.ToString();
//创建一个网络端点
IPEndPoint ipep=new IPEndPoint(IPAddress.Parse(s[kkk]),int.Parse(this.textBox5.Text));
//创建一个套接字
Socket server=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//绑定套接字到端口
server.Bind(ipep);
//开始侦听(并堵塞该线程)
server.Listen(100);
//确认连接
Socket client=server.Accept();
//获得客户端节点对象
IPEndPoint clientep=(IPEndPoint)client.RemoteEndPoint;
//获得客户端的IP地址
this.textBox7.Text=clientep.Address.ToString();
//发送[文件名]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
//发送[包的大小]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
//发送[包的总数量]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
//发送[最后一个包的大小]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString())); //数据包
byte[] data=new byte[PacketSize];
//开始循环发送数据包
for(int i=0;i<PacketCount;i++)
{
//从文件流读取数据并填充数据包
EzoneStream.Read(data,0,data.Length);
//发送数据包
CommonModule.EzoneModule.SendVarData(client,data);
//显示发送数据包的个数
this.textBox10.Text=((int)(i+1)).ToString();
//进度条值的显示
this.progressBar1.PerformStep();
} //如果还有多余的数据包,则应该发送完毕!
if(LastDataPacket!=0)
{
data=new byte[LastDataPacket];
EzoneStream.Read(data,0,data.Length);
CommonModule.EzoneModule.SendVarData(client,data);
this.progressBar1.Value=this.progressBar1.Maximum;
}
//关闭套接字
client.Close();
server.Close();
//关闭文件流
EzoneStream.Close();
}
}
this.button2.Enabled=true;
MessageBox.Show("文件传输完毕!");
} 传输完了一台以后就会卡在server.Listen(100); 这句话上提示说是"在其上下文中,该请求的地址无效。"
private void StartSend()
{
string ips = "192.168.0.22|192.168.0.13";
string[] s = ips.Split(new char[]{'|'});
for(int kkk=0;kkk<s.Length;kkk++)
{
label13.Text = kkk.ToString();
string names = textBox1.Text;
string[] txts = names.Split( new char[]{'|'});
int len = txts.Length-1;
for(int k=0; k<len;k++)
{
//创建一个文件对象
//FileInfo EzoneFile=new FileInfo(this.textBox1.Text);
FileInfo EzoneFile=new FileInfo(txts[k]);
//打开文件流
FileStream EzoneStream=EzoneFile.OpenRead();
//包的大小
int PacketSize=int.Parse(this.textBox6.Text);
//包的数量
int PacketCount=(int)(EzoneStream.Length/((long)PacketSize));
this.textBox8.Text=PacketCount.ToString();
this.progressBar1.Maximum=PacketCount;
//最后一个包的大小
int LastDataPacket=(int)(EzoneStream.Length-((long)(PacketSize*PacketCount)));
this.textBox9.Text=LastDataPacket.ToString();
//创建一个网络端点
IPEndPoint ipep=new IPEndPoint(IPAddress.Parse(s[kkk]),int.Parse(this.textBox5.Text));
//创建一个套接字
Socket server=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//绑定套接字到端口
server.Bind(ipep);
//开始侦听(并堵塞该线程)
server.Listen(100);
//确认连接
Socket client=server.Accept();
//获得客户端节点对象
IPEndPoint clientep=(IPEndPoint)client.RemoteEndPoint;
//获得客户端的IP地址
this.textBox7.Text=clientep.Address.ToString();
//发送[文件名]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
//发送[包的大小]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
//发送[包的总数量]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
//发送[最后一个包的大小]到客户端
CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString())); //数据包
byte[] data=new byte[PacketSize];
//开始循环发送数据包
for(int i=0;i<PacketCount;i++)
{
//从文件流读取数据并填充数据包
EzoneStream.Read(data,0,data.Length);
//发送数据包
CommonModule.EzoneModule.SendVarData(client,data);
//显示发送数据包的个数
this.textBox10.Text=((int)(i+1)).ToString();
//进度条值的显示
this.progressBar1.PerformStep();
} //如果还有多余的数据包,则应该发送完毕!
if(LastDataPacket!=0)
{
data=new byte[LastDataPacket];
EzoneStream.Read(data,0,data.Length);
CommonModule.EzoneModule.SendVarData(client,data);
this.progressBar1.Value=this.progressBar1.Maximum;
}
//关闭套接字
client.Close();
server.Close();
//关闭文件流
EzoneStream.Close();
}
}
this.button2.Enabled=true;
MessageBox.Show("文件传输完毕!");
} 传输完了一台以后就会卡在server.Listen(100); 这句话上提示说是"在其上下文中,该请求的地址无效。"
http://cfan.net.cn/info/12193.html
private void StartSend()
{
string ips = "192.168.0.22|192.168.0.13";
string[] s = ips.Split(new char[]{'|'});
for(int kkk=0;kkk<s.Length;kkk++)
SendData( s[kkk] );
}private SendData( string strIP )
{
//Send data here
}
按上面网页上的原代码发单个发是能发的。但是我自己改了以后发现只能发本机的了。用你的方法在本机发送两次也只发完一次就结束了