日期:2014-05-17  浏览次数:20752 次

很迷惘的一个winform Socket外网点对点传送文件的问题
我做成的是只可以在内网进行点对点传送文件的,现在有几点很迷惑的问题。第一是不知道要如何才能支持外网点对点进行传送。第二是如果有好几台机器都运行了接收端,那我怎么去区分他们,然后将文件只发给一个指定的接收端。下面是我在网上找到的代码:
//*******************************************发送端*********************************************
 private void StartSend()
        {
            //创建一个文件对象
            FileInfo EzoneFile = new FileInfo(this.textBox1.Text);
            //打开文件流 
            FileStream EzoneStream = EzoneFile.OpenRead();
            //包的大小  
            int PacketSize = int.Parse(this.txtFileSize2.Text);
            //包的数量  
            int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize));
            this.txtFileCount.Text = PacketCount.ToString();
            this.progressBar1.Maximum = PacketCount;
            //最后一个包的大小  
            int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount)));
            this.txtLastFileSize.Text = LastDataPacket.ToString();
            ////创建一个网络端点   
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(this.txtPort.Text));
            ////创建一个套接字
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            ////绑定套接字到端口  
            server.Bind(ipep);
            ////开始侦听(并堵塞该线程) 
            server.Listen(10);
            //确认连接   
            Socket client = server.Accept();
            //获得客户端节点对象  
            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
            //获得客户端的IP地址
            this.txtReceiveIP.Text = clientep.Address.ToString();
            //发送[文件名]到客户端  
            CommonModule.EzoneModule.SendVarData(client, System.Text.Encoding.Unicod