首页 新闻 会员 周边 捐助

1台服务器与多台客户端UDP网络通信

0
悬赏园豆:5 [已解决问题] 解决于 2012-01-06 14:58

1台服务器与多台客户端网络通信,如何接收并处理多台客户端发送过来的数据包。

我开启了监听,已获取发送方的IP和PORT。

问题是我如何建立SOCKET来与多个发送方进行数据通信,要建立多个ClientUdp感觉不是很好。另外就是多个客户端会同时发送大量的数据到服务器,该如何处理好些,如果每次一接到包就创建一个连接来进行通信那也太频繁了。

刚接触网络通信这块,还望大虾们不吝赐教!!!

 static IPEndPoint lp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11111);
UdpClient udpClient = new UdpClient(lp);//本地监听

private void get()
{
Thread td = new Thread(new ThreadStart(listen));
td.IsBackground = true;
td.Start();
}


///<summary>
/// 监听并处理接收到的数据包
///</summary>
private void listen()
{
try
{
Thread.Sleep(1000);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 11111);
byte[] recvBuf = udpClient.Receive(ref ep);
dataManager(recvBuf, ep);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void timer1_Tick(object sender, EventArgs e)
{
get();
}

ClientUdp ClientUDP = null;
private void dataManager(byte[] buf, IPEndPoint ep)
{
try
{
if(ClientUDP!=null)
{
ClientUDP=null;
}
string receiveContent = Encoding.ASCII.GetString(buf).Replace("\0", "");
string[] array1 = receiveContent.Split('/');
string ip = ep.Address.ToString();
int port = ep.Port;
log.Warn(ip+":"+port.ToString()+receiveContent);
                //这个地方的处理很不好,但不知道要如何去搞
ClientUDP=new ClientUdp();
ClientUDP.Create(1024);
ClientUDP.Connect(ip,port);
messageManager(ClientUDP,array1[2]);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}


private void messageManager(ClientUdp udp, string str)
{
if (str == "001")
{
udp.Send("6/5/1:");
}
else if (str == "002")
{
udp.Send("6/5/2:");
}
}
问题补充:

其实我要解决的就是这个问题:

服务器一直监听port1来接收客户端的请求;而当服务器需要向客户端发送数据时可以使用port1吗?

nightfire的主页 nightfire | 初学一级 | 园豆:94
提问于:2011-12-26 16:31
< >
分享
最佳答案
0

这个就是基本的socket通信吧

收获园豆:5
artwl | 专家六级 |园豆:16736 | 2011-12-26 17:00
其他回答(1)
1

C#游戏服务器MMRPG交流群:136485198

血海枫 | 园豆:226 (菜鸟二级) | 2012-05-28 11:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册