socket programming programing program network how crear cpp como c++ sockets unix

programming - socket tcp udp c++



¿Dónde se obtiene el archivo de encabezado/fuente "sys/socket.h"? (4)

Dado que Windows no tiene sys / socket.h, podrías considerar hacer algo como esto:

#ifdef __WIN32__ # include <winsock2.h> #else # include <sys/socket.h> #endif

Sé que indicó que no usará WinSock, pero dado que WinSock es la forma en que se realiza la red TCP en Windows, no veo que tenga otra alternativa. Incluso si utiliza una biblioteca de red multiplataforma, esa biblioteca llamará a WinSock internamente. La mayoría de las llamadas a la API de sockets BSD estándar se implementan en WinSock, por lo que con un poco de seguridad, puede hacer la misma compilación de programa basada en sockets tanto en Windows como en otros sistemas operativos. Simplemente no te olvides de hacer un

#ifdef __WIN32__ WORD versionWanted = MAKEWORD(1, 1); WSADATA wsaData; WSAStartup(versionWanted, &wsaData); #endif

en la parte superior de main () ... de lo contrario, todas sus llamadas de socket fallarán en Windows, porque el subsistema WSA no se inicializó para su proceso.

He estado intentando escribir un servidor en estilo C ++ Unix, pero estoy atascado en una máquina con Windows. Comencé con MinGW, pero no se compiló correctamente y me dijo que no podía encontrar el archivo "sys / socket.h". Lo cual, por supuesto, es necesario para que el servidor funcione. Fui a buscarlo, y creo que en algún lugar se dice que instale Cygwin, ya que viene con muchas bibliotecas. Está bien, así que lo instalé. Cada biblioteca que me pueda ofrecer. Luego fui a compilar de nuevo, y TODAVÍA no puedo encontrarlo. Fui a buscar a través de la carpeta TODO incluido, y no pude encontrar el archivo. Así que estaba un poco molesto (3 horas por el desagüe para la funcionalidad adicional que no necesito), pero seguí buscando. No puedo encontrarlo por ninguna parte. Encuentro múltiples referencias para usarlo, pero no puedo encontrar EN CUALQUIER LUGAR para descargarlo. He estado buscando durante las últimas horas y me he sentido muy frustrado con todo porque NO hay referencias a dónde puedo obtenerlo (y NO utilizaré winsock. Eso rompe la compatibilidad si recuerdo bien).

Entonces, cuento, ¿dónde puedo descargar los archivos ''socket.h'' / ''socket.c'' / ''socket.cpp''? Haría mi vida (y estoy seguro de que la vida de muchos otros) sería mucho más fácil, ¡y realmente la apreciaría!


Intente volver a instalar cygwin con el paquete seleccionado: gcc-g ++: gnu compiler collection c ++ (de la categoría devel), openssh server y client program (net), haga: la versión gnu (devel), ncurses terminal (utils), editores vim mejorados ( editores), una implementación de lisp común de ANSI (math) y libncurses-devel (lib).

Los archivos de esta biblioteca deben estar bajo cygwin / usr / include

Saludos.


Me gustaría agregar que si desea utilizar la biblioteca de Windows Socket, debe:

  • al principio: llame a WSAStartup ()

  • al final: llame a WSACleanup ()

Saludos;


Ya que ha etiquetado la pregunta C ++, podría estar interesado en usar boost::asio , ACE o alguna otra biblioteca de sockets multiplataforma para C ++ o C. Algunas otras bibliotecas multiplataforma pueden encontrarse en las respuestas a C ++ sockets library para API multiplataforma y multiplataforma .

Suponiendo que usar una biblioteca de sockets multiplataforma de terceros no es una opción para usted ...

El encabezado <sys/socket.h> está definido en IEEE Std. 1003.1 (POSIX), pero lamentablemente Windows no cumple con el estándar POSIX. El compilador MinGW es un puerto de GCC para compilar aplicaciones de Windows y, por lo tanto, no incluye estos encabezados de sistema POSIX. Si instala GCC con Cygwin , incluirá estos encabezados de sistema para emular un entorno POSIX en Windows. Sin embargo, tenga en cuenta que si usa Cygwin para sockets, a.) Tendrá que colocar el DLL de cygwin en un lugar donde su aplicación pueda leerlo y b.) Los encabezados de Cygwin y los encabezados de Windows no interactúan muy bien (así que si planea incluir windows.h , entonces probablemente no quiera incluir sys/socket.h ).

Mi recomendación personal sería descargar una copia de VirtualBox , descargar una copia de Ubuntu , instalar Ubuntu en VirtualBox y luego realizar la codificación y las pruebas en Ubuntu. Alternativamente, me dicen que Microsoft vende un "subsistema UNIX" y que está preinstalado en ciertas ediciones de gama alta de Windows, aunque no tengo idea de qué tan compatible es este sistema (y, si es compatible, con qué edición de la norma UNIX es compatible). Los winsockets también son una opción, aunque pueden comportarse de maneras sutilmente diferentes a las de POSIX, aunque las firmas pueden ser similares.