Проверьте, подключен ли сокет в C # - PullRequest
2 голосов
/ 03 февраля 2011

Привет, я пишу простую серверную программу, которая прослушивает соединения.Мой вопрос, как я могу проверить, подключен ли сокет или нет.Вот мой код

using System;
using System.Net;
using System.Net.Sockets;

class server
{
    static int port = 0;
    static String hostName = Dns.GetHostName();
    static IPAddress ipAddress;
    static bool listening = true;

    public static void Main(String[] args)
    {
        IPHostEntry ipEntry = Dns.GetHostByName(hostName);

        //Get a list of possible ip addresses
        IPAddress[] addr = ipEntry.AddressList;

        //The first one in the array is the ip address of the hostname
        ipAddress = addr[0];

        TcpListener server = new TcpListener(ipAddress,port);

        Console.Write("Listening for Connections on " + hostName + "...");

        do
        {

            //start listening for connections
            server.Start();



        } while (listening);


        //Accept the connection from the client, you are now connected
        Socket connection = server.AcceptSocket();

        Console.Write("You are now connected to the server");

        connection.Close();


    }


}

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

Я думаю, что у вас тут все испорчено.Ниже, на уровне ОС, есть два разных понятия: сокет прослушивания - это TcpListener и подключенный сокет - это то, что вы получаете после успешного accept().

Теперь прослушивающий сокет TCP не подключен, а привязан к порту (и, возможно, адресу) на локальной машине.Вот где сервер ждет запросов на подключение от клиентов.Как только такой запрос поступает, ОС создает новый сокет, который подключен в том смысле, что он имеет все четыре части, необходимые для связи - локальный IP-адрес и порт, а также удаленный адрес и порт - заполнены.

Начните с вводного текста, например, , .Еще лучше - начните с настоящего .

0 голосов
/ 03 февраля 2011

server.Start() должно быть вне цикла.Он вызывается только один раз, и прослушивающий сокет будет оставаться открытым до тех пор, пока не будет вызван Stop.

AcceptSocket будет блокироваться до тех пор, пока клиент не подключится.Если вы хотите иметь возможность принимать несколько сокетов, продолжайте их зацикливать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...