/// <summary> /// Send server discovery request to a remote host, not necessarily on /// the local network /// </summary> public void DiscoverKnownServer(string ipOrHostName, int serverPort) { IPAddress ip = NetUtil.Resolve(this.Log, ipOrHostName); NetMessage msg = NetDiscovery.EncodeRequest(this); SendSingleMessageAtOnce(msg, null, new IPEndPoint(ip, serverPort)); }
public void DiscoverLocalServers(int serverPort) { IPEndPoint broadcast = new IPEndPoint(IPAddress.Broadcast, serverPort); NetMessage msg = NetDiscovery.EncodeRequest(this); Log.Info("Broadcasting server discovery ping..."); // special send style; can't use simulated lag due to socket options try { m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); m_sendBuffer.ResetWritePointer(); msg.Encode(null, m_sendBuffer); int bytesSent = m_socket.SendTo(m_sendBuffer.Data, 0, m_sendBuffer.LengthBytes, SocketFlags.None, broadcast); Log.Verbose(string.Format(CultureInfo.InvariantCulture, "Sent {0} bytes to {1}", bytesSent, broadcast)); return; } catch (SocketException sex) { if (sex.SocketErrorCode == SocketError.ConnectionReset || sex.SocketErrorCode == SocketError.ConnectionRefused || sex.SocketErrorCode == SocketError.ConnectionAborted) { Log.Warning("Remote socket forcefully closed: " + sex.SocketErrorCode); return; } Log.Warning("Execute SocketException: " + sex.SocketErrorCode); return; } finally { m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false); } }