需要使用代理 进行文件传输 用了Oob  不知道怎么用代理
请大虾们指教 
领导要求的工作 :(
最好有源码

解决方案 »

  1.   

    代理?加一个AppServer来控制文件传输还是?
      

  2.   

    就是使用代理进行文件传输啊因为已经做好了一个
    发送端:类似于这样
     client = server.Accept();
                    //获得客户端节点对象 
                    IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;                string sAnswer = System.Text.Encoding.Unicode.GetString(FileTransferClass.ReceiveVarData(client));
                    if (sAnswer != "Accept")
                    {
                        MessageBox.Show("对方拒绝接受!");                }
                    else
                    {                    //获得客户端的IP地址 
                        //this.textBox7.Text = clientep.Address.ToString();
                        //发送[文件名]到客户端 
                        FileTransferClass.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
                        //发送[包的大小]到客户端 
                        FileTransferClass.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
                        //发送[包的总数量]到客户端 
                        FileTransferClass.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
                        //发送[最后一个包的大小]到客户端 
                        FileTransferClass.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));                    //数据包 
                        byte[] data = new byte[PacketSize];
                        //开始循环发送数据包 
                        for (int i = 0; i < PacketCount; i++)
                        {
                            //从文件流读取数据并填充数据包 
                            MyFileStream.Read(data, 0, data.Length);
                            //发送数据包 
                            FileTransferClass.SendVarData(client, data);
                            //显示发送数据包的个数 
                            //this.textBox10.Text = ((int)(i + 1)).ToString();
                            //进度条值的显示 
                            //this.progressBar1.PerformStep();
                            this.Invoke(upb);
                        }                    //如果还有多余的数据包,则应该发送完毕! 
                        if (LastDataPacket != 0)
                        {
                            data = new byte[LastDataPacket];
                            MyFileStream.Read(data, 0, data.Length);
                            FileTransferClass.SendVarData(client, data);
                            //this.progressBar1.Value = this.progressBar1.Maximum;
                            this.Invoke(upbtm, new object[] { PacketCount });
                        }                    //关闭套接字 
                        client.Close();
                        server.Close();
                        //关闭文件流 
                        MyFileStream.Close();
                        //this.button2.Enabled = true;
                        MessageBox.Show("文件传输完毕!");
                        this.Invoke(sbe);
                        bFlag = true;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("连接已经断开!");
                    //this.Invoke(sbe);
                }
                finally
                {
                    //关闭套接字 
                    if(client!=null)
                        client.Close();
                    if(server!=null)
                        server.Close();
                    //关闭文件流 
                    if(MyFileStream!=null)
                        MyFileStream.Close();
                    if (!bClosedFlag)
                    {
                        if (!bFlag)
                            this.Invoke(sbe);
                    }
                }
    但是这样只能实现局域网内传输或者是公网之间传送  不能实现局域网和公网之间的传送 需要代理了 不知道该怎么做
      

  3.   

    前面没全 加上这个:
                UpdateProgressBarMaximum upbm = new UpdateProgressBarMaximum(UpdateProgressBarMaximumMethod);
                UpdateProgressBar upb = new UpdateProgressBar(UpdateProgressBarMethod);
                UpdateProgressBarToMaximum upbtm = new UpdateProgressBarToMaximum(UpdateProgressBarToMaximumMethod);
                SetButtonEnable sbe = new SetButtonEnable(SetButtonEnableMethod);            Socket server = null;
                Socket client = null;
                FileStream MyFileStream = null;            bool bFlag = false;            try
                {
                    //this.Invoke(timeUpdater, new object[] {currentTime});
                    //创建一个文件对象 
                    FileInfo EzoneFile = new FileInfo(this.sFileName);
                    //打开文件流 
                    MyFileStream = EzoneFile.OpenRead();
                    //包的大小 
                    int PacketSize = 50000;
                    //包的数量 
                    int PacketCount = (int)(MyFileStream.Length / ((long)PacketSize));
                    //this.textBox8.Text = PacketCount.ToString();
                    //this.progressBar1.Maximum = PacketCount;
                    this.Invoke(upbm, new object[] { PacketCount });
                    //最后一个包的大小 
                    int LastDataPacket = (int)(MyFileStream.Length - ((long)(PacketSize * PacketCount)));
                    //this.textBox9.Text = LastDataPacket.ToString();
                    //创建一个网络端点 
                    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, iPort);
                    //IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(this.m_ClientIp), 8888);
                    //创建一个套接字 
                    server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    //绑定套接字到端口 
                    server.Bind(ipep);
                    //开始侦听(并堵塞该线程)                 server.Listen(10);