现在的位置: 首页 > 综合 > 正文

局域网聊天编成–问题

2012年04月07日 ⁄ 综合 ⁄ 共 1203字 ⁄ 字号 评论关闭

这几天在做局域网聊天软件,想学学winform编写,可是遇到了问题,不知道该怎么解决,问题大家请看下面,请各位大大帮忙解决一下:

 

1.运行之后就会弹出这个错误:

image

 

2.点击确定之后后提示如下的异常:

image

 

3.我进行单步调试发现:

image

我IPAddress address= ipHostEntry.AddressList[0];用的是AddressList[0]第一个元素,而我电脑确切的IP却应该是AddressList[2].

但是我在别的电脑也进行测试过,他们运行出来确切的IP有AddressList[1]、AddressList[3]、也有AddressList[5]的,我懵了,各位这个问题怎么解决,请帮帮忙。

 

4.我的源码如下:

     
 /// <summary>
        /// 处理接受到的信息,分别对文件和普通消息进行处理
        /// </summary>
        private void ReceiveNews()
        {
            try
            {
                //初始化接受套接字:寻址方案,以字符流方式和Tcp通信
                 socketReceive = new Socket(AddressFamily.InterNetwork,
                 SocketType.Stream,
                 ProtocolType.Tcp);

                //获取本机IP地址并设置接受信息的端口
                  String HostName = Dns.GetHostName();
                  IPHostEntry ipHostEntry = Dns.GetHostEntry(HostName);

                  IPAddress address= ipHostEntry.AddressList[0];
                  ipReceive = new IPEndPoint(address, 8001);

                //将本机IP地址和接受端口绑定到接受套接字
                socketReceive.Bind(ipReceive);

                //监听端口,并设置监听缓存大小为1024byte
                socketReceive.Listen(1024);
            }
            catch(Exception err) 
            {
                MessageBox.Show(err.Message);
            }

            //定义接受信息时缓冲区
            byte[] buff = new byte[1024];

            //连续接受客户端发送过来的信息

            while (true)
            {

                //定义一个chat套接字用来接受信息
               
                Socket chat = socketReceive.Accept();
               
                //定义一个处理信息的对象
                ChatSession cs = new ChatSession(chat,this.lvwDisplayUser);

                //定义一个新的线程用来接收其他主机发送的信息


                Thread newThread = new Thread(new ThreadStart(cs.StartChat));
                newThread.SetApartmentState(ApartmentState.STA);
                //启动新的线程
                newThread.Start();
            }

        }
 
麻烦各位高手了,请多多指点。

抱歉!评论已关闭.