public partial class Form1 : Form
    {
        //server-用于处理客户端连接请求的socket         
        Socket clientSocket = null;       
        delegate void del();        
        public Form1()      
        {         
            InitializeComponent();     
        }         
        //server-侦听方法     
        private void listen()     
        {           
            //获取服务器IP     
            string hostName = Dns.GetHostName();       
            IPAddress[] ip = Dns.GetHostAddresses(hostName);     
            IPAddress HostIp = ip[0];           
            //创建一个网络端点      
            IPEndPoint iep = new IPEndPoint(HostIp, 9090);     
            //创建服务端服务端套接字           
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);             
            //将套接字与网络端点绑定         
            serverSocket.Bind(iep);         
            //将套接字置为侦听状态,并设置最大队列数为10        
            serverSocket.Listen(10);           
            //以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的 Socket        
            //新的套接字:包含对方计算机的IP和端口号,可使用这个套接字与本机进行通信        
            clientSocket = serverSocket.Accept();       
            if (clientSocket != null)        
            {           
                MessageBox.Show("连接成功!");
            }                
        }     在将套接字与网络端点绑定的时候会报这个错 ,我是新手 ,刚学习socket,麻烦帮忙指教一下 。

解决方案 »

  1.   

    循环看一下IPAddress[] ip里面的值是否有效
      

  2.   

    IPAddress HostIp = IPAddress.Any;
    IPEndPoint iep = new IPEndPoint(HostIp, 9090); 
    Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   
    serverSocket.Bind(iep);   
    serverSocket.Listen(10); 这样会启用一个0.0.0.0:9090的侦听 你的做法只能在第一个IP地址上绑定侦听,如果非要在第一个IP地址上绑定,看看你的第块网卡的IP是否设置正确了。
      string hostName = Dns.GetHostName();   
      IPAddress[] ip = Dns.GetHostAddresses(hostName);   
      // 插入调试用的语句
      MessageBox.Show(ip[0].ToString());
     
     
      

  3.   

    这是很想当然的啦。要想使用ip数组中的值,也应该遍历这个数组查找到第一个ipv4类型的地址,而不是随便抓出个ip[0]呀。
      

  4.   

    服务器使用#3楼的IPAddress.Any来绑定endpoint是对的,必须要查找自己的ip地址。
      

  5.   

    这个问题主要是看你的ip是静态的,还是动态获取的,你不信可以在动态获取ip中使用,是不会出错的,或者你使用静态的,那么你可以断网来试,也不会出错!