我的程序主要是监听一个端口,实现点对点的传输,但是这在里我只能监听自己的IP也端口,当我把IP改为另一台计算机的IP时,就会出现
“在其上下文中,该请求的地址无效。”
这样的错误原码是从网上找的,小弟我对这方面不了解,希望大哥大姐们帮帮
 /// <summary>
        /// 根据给定的服务器和端口号建立连接
        /// </summary>
        /// <param name="strHost">服务器名</param>
        /// <param name="iPort">端口号</param>
        /// <returns></returns>
        public static Socket ConnectToServer(string strHost, int iPort,TextBox getinfor)
        {
            try
            {
                GetInfor = getinfor;
                IPAddress ipAddress = Dns.Resolve(strHost).AddressList[0];
                IPEndPoint ipPoint = new IPEndPoint(ipAddress, iPort);                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                s.Connect(ipPoint);
                return s;
            }
            catch (Exception e)
            {
                throw (new Exception("建立到服务器的连接出错" + e.Message));
            }
        }
……
……
   //下面是服务器端接受信息的代码:创建监听:
        ///<summary>
        ///再给定的主机和端口上创建监听程序
        ///</summary>
        ///<paramname="strAddress"></param>
        ///<paramname="iPort"></param>
        public void BuildingServer(string strAddress, int iPort)
        {
            IPAddress ipAddress = Dns.Resolve(strAddress).AddressList[0];
            try
            {
                listener = new TcpListener(ipAddress, iPort);
            }
            catch (Exception e)
            {
                AddInfo(e.Message);
            }
        }        private void AddInfo(string p)
        {
            throw new Exception("The method or operation is not implemented.");
        }
        //开始监听:
        ///<summary>
        ///开始监听
        ///</summary>
        private TextBox tbLog = null;
        public void StartListen()
        {
            bool done = false;
            listener.Start();//问题就是在这里出现的“**在其上下文中,该请求的地址无效**”
            while (!done)
            {
                Socket s = listener.AcceptSocket();
                if (s != null)
                {
                    DealWithSocket dws = new DealWithSocket(s, this.tbLog);
                    
                    StartThread(new ThreadStart(dws.DealWith));
                }
            }
        }下面是我这样帮定IP与端口的
……
……
CommunClass db = new CommunClass();
        string Bindhost = "192.168.0.249";//**当我把这个IP改为其他IP(192.168.0.246)时就会出现那个错误也就是说我监听不了别的计算机
        int Bindport = 8080;
        string filename = "";
        public Form1()
        {            InitializeComponent();
            db.BuildingServer(Bindhost, Bindport);
            ThreadStart threadDelegate = new ThreadStart(db.StartListen);
            Thread newThread = new Thread(threadDelegate);
            newThread.Start();        }

解决方案 »

  1.   

    这种例子网上很多阿,google一下就有了 
    http://blog.csdn.net/3cts/archive/2007/08/08/1731596.aspx
    看看吧
      

  2.   

    http://topic.csdn.net/t/20031001/22/2320478.html
      

  3.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Net.Sockets;
    using System.Threading;
    using System.Net;namespace File_Transfer
    {
        public partial class Client : Form
        {
            //变量
            private ThreadStart start;
            private Thread listenThread;
            static private bool m_bListening = false;
            static private System.Net.IPAddress MyIP = System.Net.IPAddress.Parse("127.0.0.1");
            static private TcpListener listener = new TcpListener(MyIP, 5567);
            private String msg;
            //初始化监听器
            public Client()
            {
               InitializeComponent();
            }        private void Client_Load(object sender, EventArgs e)
            {
                 
                Control.CheckForIllegalCrossThreadCalls = false;
                start = new ThreadStart(startListen);
                listenThread = new Thread(start);   
            }        private void button1_Click(object sender, EventArgs e)
            {
                String mystr = textBox1.Text;
                string ipadd = textBox4.Text;
               this.sendmymsg(ipadd);
            }
            public void sendmymsg(string IPaddress)
            {
                try
                {
                    TcpClient client = new TcpClient(IPaddress, 5567);
                    NetworkStream sendStream = client.GetStream();
                    //StreamWriter writer = new StreamWriter(sendStream);
                    String msg = textBox1.Text;
                    Byte[] sendBytes = Encoding.Default.GetBytes(msg);
                    sendStream.Write(sendBytes, 0, sendBytes.Length);
                    //writer.Flush();
                    sendStream.Close();
                    client.Close();
                    textBox2.Text = "发送成功!!";            }
                catch(System.Exception e)
                {
                    textBox2.Text = e.ToString();
                }
            }        private void textBox1_TextChanged(object sender, EventArgs e)
            {
               
            }//****************************** Server ******************************************
            private void showmore()
            {
                textBox3.Text = msg;
            }
            private void button2_Click(object sender, EventArgs e)
            {
                if (m_bListening)
                {
                    m_bListening = false;
                    label4.Text = "Server Idle...";
                }
                else
                {
                    m_bListening = true;
                    listenThread.Start();
                    label4.Text = "Server Listening...";
                }
            }
            private void startListen()
            {
                //textBox1.Text = "listening...";
                listener.Start();
                //接收数据
                while (m_bListening)
                {
                    //测试是否有数据
                    try
                    {
                        TcpClient client = listener.AcceptTcpClient();
                        NetworkStream ns = client.GetStream();
                        //StreamReader sr = new StreamReader(ns);//流读写器
                        //字组处理
                        byte[] bytes = new byte[1024];
                        int bytesread = ns.Read(bytes, 0, bytes.Length);
                        msg = Encoding.Default.GetString(bytes, 0, bytesread);
                        //显示
                        //MessageBox.Show(msg);
                        showmore();
                        ns.Close();
                        client.Close();
                        //清场                }
                    catch (Exception re)
                    {
                        MessageBox.Show(re.Message);
                    }            }
                listener.Stop();
                //
            }        private void Client_FormClosed(object sender, FormClosedEventArgs e)
            {
                System.Environment.Exit(0); 
            }    }
    }
    谢谢各位!!