/ / Utilizzo di Winsock in Visual Studio - c ++, visual-studio, visual-studio-2015, winsock

Utilizzo di Winsock in Visual Studio - c ++, visual-studio, visual-studio-2015, winsock

Sono un noob C ++.

Voglio usare Winsock per inviare una richiesta HTTP a un indirizzo IP. Ho trovato molti contenuti online, il che è fantastico. Tutti gli esempi avevano gli stessi errori, mi sono reso conto che richiedono tutti Winsock.

Non ho mai usato una libreria in C ++, non so cosa o come collegare qualcosa al mio progetto (in Visual Studio) o cosa devo scaricare.

In particolare non gli piacciono le seguenti righe di codice

#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr
#include<netdb.h> //hostent

La guida di Microsoft non mi dice come riparare o collegare la libreria al mio progetto.

Come collego e utilizzo Winsock?

Grazie!

risposte:

1 per risposta № 1

In particolare non gli piacciono le seguenti righe di codice

#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr
#include<netdb.h> //hostent

Tali intestazioni non sono disponibili su Windows, vengono utilizzate solo su altre piattaforme.

Come collego e utilizzo Winsock?

Su Windows, devi usare winsock.h o winsock2.h nel tuo codice e link a ws2_32.lib.

E devi chiamare WSAStartup() e WSACleanup(), che non esistono su altre piattaforme.

E devi usare SOCKET invece di int per impugnature. Su Windows, i socket sono veri e propri oggetti del kernel. Su altre piattaforme, sono rappresentati come descrittori di file.

E devi chiamare closesocket() invece di close() quando si disconnette / libera una maniglia di presa.

Oltre a ciò, la maggior parte delle altre chiamate alle funzioni API basate su BSD (socket(), bind(), connect(), recv(), send(), select(), ecc.) funzionano allo stesso modo in Windows come in altre piattaforme (beh, select() ha una differenza minore: il primo parametro èignorato). E, naturalmente, WinSock ha molte estensioni specifiche di Windows che altre piattaforme non hanno. Ma se stai cercando di usare il codice di qualcun altro che hai trovato online, è probabile che stia usando solo le funzioni compatibili con BSD.

Detto questo, Winsock è di livello inferioreAPI di rete e molto difficile da usare correttamente per Noobs. E poi devi aggiungere un protocollo a livello di applicazione, come HTTP, al di sopra di esso, che è ancora più difficile da ottenere per nessuno. Volere imparare qualcosa di nuovo è fantastico, ma saltare direttamente all'HTTP senza prima capire i fondamenti è una ricetta per il disastro. Stai meglio usando Microsoft "s WinInet o WinHTTP API invece, lascia che gestisca per te tutti i dettagli di rete e protocollo.


2 per risposta № 2

[Nuovo qui, non posso commentare]

Per collegare correttamente la tua app, invece di selezionare "Opzioni ..." puoi inserire le seguenti righe nella tua stdafx.h intestazione:

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib, "WS2_32.lib")

Il #pragma comment indica al linker di utilizzare la libreria WS2_32.lib di cui hai bisogno.