C++ server-Seite nicht blockiert, auf listen()
Den code unten nicht blockieren, listen(), es ist nur die Ausführung beendet. Könnten Sie mir sagen, warum? (initWSA gibt true zurück, ich habe es). Ich bin nach einem tutorial, und ich wurde gesagt, dass es gesperrt werden sollte, weil es auf der Suche nach Kunden zu verbinden.
#include <iostream>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
#define PORT 10000
bool initWSA(){
WSADATA wsadata;
int error = WSAStartup(0x0202, &wsadata);
if (error) return false;
if (wsadata.wVersion != 0x0202){
WSACleanup();
return false;
}
return true;
}
void closeConnection(SOCKET s)
{
//Close the socket if it exists
if (s)
closesocket(s);
WSACleanup(); //Clean up Winsock
}
int main(){
initWSA();
SOCKET s;
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET) cout << "INVALID SOCKET" << endl;
if (bind(s, (LPSOCKADDR)&addr, sizeof(addr)) == SOCKET_ERROR){
cout << "SOCKET ERROR" << endl;
}
listen(s, SOMAXCONN);
//cout << "CAUGHT ONE" << endl;
//closeConnection(s);
return 0;
}
- listen() nicht blockiert. accept() blockiert und gibt einen client<>server-socket auf Verbindung.
- was hört dann tun ?
- Äh.. Mann hören, oder Google 'listen()'
- Also soll ich anrufen, hören zu und akzeptieren Sie Sie dann nach ? EDIT: Ja es funktioniert, danke, du darfst die Antwort 🙂
listen()
sagt das OS zu starten queuing-wäre-clients, dieconnect()
auf deinen server (und ein Hinweis an, wie viele ausstehende verbindungen zu ermöglichen)...accept()
tatsächlich macht die peer-to-peer-verbindungen. Sie sollten in der Tataccept()
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst von allen, lassen Sie uns klären, die genaue Semantik der
listen()
undaccept()
Funktionen.hören-Funktion:
accept-Funktion:
Das entsprechende Beispiel (Quelle):