9
votes

Impossible de créer une prise sur Windows

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");
}


0 commentaires

3 Réponses :


13
votes

Vous devez appeler wsastartup () avant toute autre fonction fonctionnera sous Windows (et vous êtes censé appeler wsacleanup () quand vous avez terminé) .


2 commentaires

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 ...



3
votes

Jerry Coffin a raison sur wsastartup () code> et wsacleanup () code>.

Notez également que ce code p> xxx pré>

est problématique car socket code> est un type non signé ( non signé INT code>). p>

de winsock.h code> p> xxx pré>

donc, imo il est préférable de remplacer cette ligne avec P>

if( INVALID_SOCKET == (sock = socket(AF_INET, SOCK_STREAM, 0)) )


0 commentaires

3
votes

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;
}


0 commentaires