自动搜索局域网内的游戏房? 我在做一个局域网游戏。一个玩家先建立房间(作主机),其他玩家加入。我想让其他玩家方便一点,提供给自动搜索按钮,能找出局域网内已经建立的游戏房。求思路或算法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 向255广播地址发送你自己的ip地址和端口,如果当前网段有机器就通过ip回你,你再去连它 哦。。看懂了,你说得好简洁。我后来才突然想到广播这个方法的,现在看起来原来你说的就是我想到的方法。。这是我实现的代码。 /// <summary> /// 客户端若想要寻找服务端,可以调用一次此方法。 /// 每发现一个服务端,就进行一次callback回调。此方法永不返回。 /// </summary> /// <param name="callback"></param> public void FindServer(Action<IPAddress> callback) { //Console.WriteLine(IPAddress.Broadcast); clientUdp = new UdpClient(); IPEndPoint broadcastEndPoint = new IPEndPoint(IPAddress.Broadcast, serverListeningPort); clientUdp.Send(new byte[] { MessagesSentByClient.WantServer }, 1, broadcastEndPoint); for (; ; ) { IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); var bytes = clientUdp.Receive(ref remoteIpEndPoint); if (bytes[0] == MessagesSentByServer.HereIsServer) { Console.WriteLine(remoteIpEndPoint + ": 收到服务器的回复"); callback(remoteIpEndPoint.Address); } } } /// <summary> /// 服务端若想要自动被发现,则可以在一条线程中运行此方法。此方法永不返回。 /// </summary> public void WaitFind() { serverUdp = new UdpClient(serverListeningPort); for (; ; ) { IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); var bytes = serverUdp.Receive(ref remoteIpEndPoint); if (bytes.Length == 1 && bytes[0] == MessagesSentByClient.WantServer) { Console.WriteLine(remoteIpEndPoint + ": WantServer"); serverUdp.Send(new[] { MessagesSentByServer.HereIsServer }, 1, remoteIpEndPoint); } } } 如何汉化WINFORM版本的DevExpress.XtraScheduler控件和弹出Appointments表单的汉化 使用C#给系统增加右键菜单 Picturebox“未将对象引用设置到对象的实例”的简单问题 字符串截取问题 MDI窗体标题栏不合并 如何使axWebBrowser得到一个网页的cookie?? GridView的更新 求一数字判断正则表达式 委托和事件之2— 一个虚构的故事(转载) Windows基础应用程序 为什么SQL语句在C#中会提示(常量中有换行符,应输入;无效的表达式项“,”) vs2010 如何关闭自动启动中文输入法
/// <summary>
/// 客户端若想要寻找服务端,可以调用一次此方法。
/// 每发现一个服务端,就进行一次callback回调。此方法永不返回。
/// </summary>
/// <param name="callback"></param>
public void FindServer(Action<IPAddress> callback)
{
//Console.WriteLine(IPAddress.Broadcast);
clientUdp = new UdpClient();
IPEndPoint broadcastEndPoint = new IPEndPoint(IPAddress.Broadcast, serverListeningPort);
clientUdp.Send(new byte[] { MessagesSentByClient.WantServer }, 1, broadcastEndPoint); for (; ; )
{
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
var bytes = clientUdp.Receive(ref remoteIpEndPoint);
if (bytes[0] == MessagesSentByServer.HereIsServer)
{
Console.WriteLine(remoteIpEndPoint + ": 收到服务器的回复");
callback(remoteIpEndPoint.Address);
} }
} /// <summary>
/// 服务端若想要自动被发现,则可以在一条线程中运行此方法。此方法永不返回。
/// </summary>
public void WaitFind()
{
serverUdp = new UdpClient(serverListeningPort);
for (; ; )
{
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
var bytes = serverUdp.Receive(ref remoteIpEndPoint);
if (bytes.Length == 1 && bytes[0] == MessagesSentByClient.WantServer)
{
Console.WriteLine(remoteIpEndPoint + ": WantServer");
serverUdp.Send(new[] { MessagesSentByServer.HereIsServer }, 1, remoteIpEndPoint);
} }
}