网上找了现成的代码改成了多个文件传输。可是改到多台电脑一起传输的时候就有了问题。能不能帮我看一下。
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); 这句话上提示说是"在其上下文中,该请求的地址无效。"

解决方案 »

  1.   

    原来的代码的网址如下
    http://cfan.net.cn/info/12193.html
      

  2.   

    如果单个没有问题,你可以把单个发送抽出来做一个单独的函数,类似于如下进行发送
    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
    }
      

  3.   

    http://cfan.net.cn/info/12193.html
    按上面网页上的原代码发单个发是能发的。但是我自己改了以后发现只能发本机的了。用你的方法在本机发送两次也只发完一次就结束了