写了个聊天程序,服务端和客户端在一台机器(服务端ip设置局域网地址,或者127.0.0.1)没问题,在单独能上网的机器ip设成广域网ip也没问题,不在一台机器就连不上了,在广域网,局域网都不行
服务端:
        private void Form1_Load(object sender, EventArgs e)//载入
        {
            udp1.LocalHost = ServerIP;
            udp1.LocalPort = ServerPort;
        }
        private void Ser_Start_Click(object sender, EventArgs e)//启动
        {
            udp1.Active = true;
            this.Text = "服务端---正在运行";
        }        private void udp1_DataArrival(byte[] Data, IPAddress Ip, int Port)//处理接受数据
        {
            DataArrivaldelegate outdelegate = new DataArrivaldelegate(DataArrival);
            this.BeginInvoke(outdelegate, new object[] { Data, Ip, Port });
        }        private delegate void DataArrivaldelegate(byte[] Data, System.Net.IPAddress Ip, int Port);        private void DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port) //数据到达处理
        {
            try
            {
                ClassMsg msg = new ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(Data))) as ClassMsg;                switch (msg.mc)
                            {
                                case mc.Logining://登录用户
                                    UserLogin(msg, Ip, Port, 1);
                                    break;
                                case mc.Close://下线
                                    UpdateUserState(msg, Ip, Port);
                                    break;
                                case mc.Pull0://打洞
                                    
                                    break;
                                case mc.Pull://打洞
                                    //MessageBox.Show("申请打洞:" + msg.RIP + msg.RPort);
                                    Pull(msg, Ip, Port);
                                    break;
                            }            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message,"错误");
            }
        }
客户端:

udp1.Send(IPAddress.Parse(Ser.ServerIP), Convert.ToInt32(Ser.ServerPort), new ClassSerializers().SerializeBinary(msg).ToArray());
发送消息
udp1的localhost没有指定,localport是0(随机端口?)为什么呢?谢谢

解决方案 »

  1.   

    肯定可以的 端口不是随机指定的 两边连接端口要一样的
      

  2.   

    我在客户端启动时随机指定的端口发送登陆消息,以后一直使用这个就可以还是说我的客户端也要使用服务端一样的端口(服务端18606,客户端也用18606)?
      

  3.   

    推一下...谢谢大家,想不通为什么啊
      

  4.   

    肯定可以 , 客户端发送信息到服务端的端口一定要和服务端监听的端口一致。
      

  5.   

    问题是我在一台机器没问题,分开就不行了.客户端发送到服务端18606,服务端监听18606