예제 #1
0
        /// <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));
        }
예제 #2
0
        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);
            }
        }