2

ポート 80 をリッスンしたい。このために、TCP リスナーをコーディングし、管理者権限を付与しました。しかし、うまくいきません(失敗します)。

これはエラーです:

ソケットによって禁止されている方法でソケットにアクセスしようとしました。
アクセス許可

私のコード:

static void Main(string[] args)
{
    WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
    if (hasAdministrativeRight == true)
    {
        TcpListener server;
        Int32 port = 80;
        IPAddress localAddr = IPAddress.Parse("127.0.0.1");
        server = new TcpListener(localAddr, port);
        server.Start();
        Byte[] bytes = new Byte[256];
        String data = null;
        while (true)
        {
            Console.Write("Waiting for a connection... ");
            TcpClient client = server.AcceptTcpClient();
            Console.WriteLine("Connected!");
            data = null;
            NetworkStream stream = client.GetStream();
            int i;
            while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
            {
                data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                Console.WriteLine("Received: {0}", data);
                data = data.ToUpper();

                byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
                stream.Write(msg, 0, msg.Length);
                Console.WriteLine("Sent: {0}", data);
            }

            client.Close();
        }
    }
}
4

3 に答える 3

3

ポート 80 は、IIS またはおそらく Skype によって既に使用されていると思われます。それらをオフにするか、使用するポートを変更する必要があります。

これを実行して、ポート 80 を使用しているプロセス (PID) を特定します。

C:\> netstat -ano

Active Connections
  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4

PID がシステム プロセス (私の場合は 4) を指している場合、それは IIS だと思います。

MSDN ソケット エラー コード

さらに詳細については、server.Start() 呼び出しを try/catch でラップし、SocketException をキャッチして、SocketException.ErrorCode を調べます。

try
{
    server.Start();
}
catch (SocketException exception)
{
    Console.Write(exception.ErrorCode);
}

MSDN TcpListener.Start()

于 2012-05-08T20:45:26.763 に答える
0

マシンに IIS がある場合、ポート 80 は IIS によって使用されます (デフォルト)。このリンクhttps://stackoverflow.com/a/108397/1221319に従って、 IIS がポート 80 をリッスンしないようにします。

于 2012-05-08T21:00:01.933 に答える