0

また戻ってきました(すみません)

ソケット C++ アプリケーションを作成しましたが、正しく動作しません。

これは私の最初のコードです:

void Network::Start()
{
    this->socket = Env::GetSocket();

    SOCKADDR_IN sInformation;

    sInformation.sin_family = AF_INET;
    sInformation.sin_addr.s_addr = INADDR_ANY;
    sInformation.sin_port = htons(30000);

    bind(this->socket, (SOCKADDR*) (&sInformation), sizeof(sInformation));
    listen(this->socket, 10);

    while (true)
    {
        this->DO();
    }
}

そして DO 関数:

void Network::DO()
{
    SOCKET s = SOCKET_ERROR;

    sockaddr_in sock_addr;

    accept(s, (sockaddr*) &sock_addr, NULL);

    if (INVALID_SOCKET == s)
    {
        return;
    }
    else
    {
        cout << "Received connection from " << inet_ntoa(sock_addr.sin_addr);
    }
}

何が起こるか、常に (接続しても) 値 s は INVALID_SOCKET です。.SWF 経由で接続していますが、接続を受け入れません。私は何を間違っていますか?

4

2 に答える 2

1

acceptリッスンしているソケットをパラメーターとして取り、新しく接続されたソケットを返します。

socklen_t length = sizeof(sockaddr_in);
s = accept(this->socket, (sockaddr*) &sock_addr, &length);

EDIT:AF_INET、SOCK_STREAM、およびsInformationで作成されたソケットをクリアして、プログラムをテストしました。

bzero((char *) &sInformation, sizeof(sInformation));

...MacOS X と Linux でうまく動作しているようです。

于 2013-06-12T18:24:01.337 に答える