写了个聊天程序,服务端和客户端在一台机器(服务端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(随机端口?)为什么呢?谢谢
服务端:
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(随机端口?)为什么呢?谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货