J'ai un problème assez embarrassant. Le code suivant ne créera simplement pas de prise sur Windows; Il échoue et affiche le message d'erreur. Quelqu'un pourrait-il expliquer brièvement pourquoi cela pourrait être? Je suis incroyablement confus et frustré que quelque chose de si simple échoue. Merci.
int sock; if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { printf("error opening socket"); }
3 Réponses :
Vous devez appeler wsastartup () code> avant toute autre fonction fonctionnera sous Windows (et vous êtes censé appeler
wsacleanup () code> quand vous avez terminé) . P>
Merci d'être en quelque sorte que je reçois Winsock pour travailler tout ce temps sans utiliser cette fonction. Très étrange.
Vous utilisez probablement généralement un autre composant qui doit utiliser des prises et qui fait le démarrage pour vous ...
Jerry Coffin a raison sur Notez également que ce code p> est problématique car de donc, imo il est préférable de remplacer cette ligne avec P> wsastartup () code> et
wsacleanup () code>.
socket code> est un type non signé (
non signé INT code>). p>
winsock.h code> p>
if( INVALID_SOCKET == (sock = socket(AF_INET, SOCK_STREAM, 0)) )
Exemple:
#include <Windows.h> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") int _cdecl main(){ WSADATA Data; int socket; // or you can use SOCKET socket WSAStartup(MAKEWORD(2, 2), &Data); // 2.2 version socket = socket(AF_INET, SOCK_DGRAM, 0); if(udep_socket<0){ printf("Error Creating Socket"); }else{ printf("Successfully Created Socket"); } system("pause"); return 0; }