0
#include <iostream>
#include <WinSock2.h>
#include <Windows.h>

using namespace std;

SOCKET listener,connector;
SOCKADDR_IN myAddress,remoteAddress;

int main()
{

ネットワーク用にウィンドウを初期化する

WSAData wdata;
WSAStartup(MAKEWORD(2,2),&wdata);

リスナーの初期化

ZeroMemory(&listener,sizeof(listener));
ZeroMemory(&connector,sizeof(connector));
listener = socket(AF_INET,SOCK_STREAM,0);

構造体 SOCKADDR_IN myAddress に値を割り当てます

myAddress.sin_addr.s_addr = INADDR_ANY; //accept any ip
myAddress.sin_family = AF_INET;//tcp
myAddress.sin_port = htons(7000);//changing 7000 port to string with htons method

リスナーソケットとアドレスをバインドして、リスナーにどこを見るかを指示します

if(bind(listener,(LPSOCKADDR)&myAddress,sizeof(listener)))
{
    cout<< "bound";
}
//listen method
if(listen(listener,1));
{
cout<<"Waiting";
}
int Size = sizeof(remoteAddress);

リッスンし続けるために無限ループを初期化する

while(true)
{
    connector = accept(listener,(LPSOCKADDR)&remoteAddress,&Size);
    //read connection request
    if(sizeof(connector)< 0)
    {
        cout <<"noinfo\n";
    }
}
}

クライアントが接続されていなくても、コードは「情報なし」を表示しません:O私は間違ったことを知りません:( plsは私を助けてくれます

4

2 に答える 2

1

もちろんそうです。あなたのコードには多くのエラーがあります:

1)connectorサイズを 0 未満にすることはできないため、if(sizeof(connector)< 0)check は常に false です。if(connector == INVALID_SOCKET)代わりに使用してください。

2)ステートメント;の最後を削除しifます。そうしないと、チェックが無意味になります。

if(bind(listener,(LPSOCKADDR)&myAddress,sizeof(listener))) {...}
if(listen(listener,1)) {...}

PS残りのコードを投稿してください。他にも多くのエラーが発見されるのを待っていると確信しています。

于 2013-02-08T14:18:16.377 に答える
0

あなたのコードは正しかったが、構造 myAddress をソケットではなくゼロで埋める必要がある

ZeroMemory(&myAddress,sizeof(myAddress));

そして、条件文の後のセミコロンは役に立たなかった

于 2013-02-08T14:32:33.910 に答える