2009-10-19 13 views
8

Existe una biblioteca de fuente abierta gratuita (en C/C++) para sockets que es ampliamente utilizada y es compatible con una amplia gama de sistemas operativos (Windows, Unix/Linux , FreeBSD, etc.) Al igual que pthreads.Qué es una popular biblioteca multiplataforma, libre y de fuente abierta

De lo contrario, la única solución que queda sería escribir socket wrapper para cada sistema operativo. ¿O sería suficiente escribir un wrapper contra winsock y las bibliotecas GNU C sys/socket.h?

¿No sería posible que lo implemente contra la biblioteca de zócalos proporcionada con GNU C. GNU C está disponible para una amplia gama de plataformas y mi código funcionará en todas esas plataformas?

+2

nota de que C y C++ darán bastante diferentes respuestas. El hecho de que sean similares no significa que deba etiquetar las preguntas con ambos. Si quiere bibliotecas C++, etiquételas como C++: las bibliotecas C serán bastante torpes en comparación con una biblioteca C++ nativa. –

+0

Estoy escribiendo una biblioteca de C++, pero estaría bien si la implementación está en C. Puedo usar ambos. – ata

+1

¿No sería posible que lo implemente contra la biblioteca de socket proporcionada con GNU C. GNU C está disponible para una amplia gama de plataformas y mi código funcionará en todas esas plataformas. – ata

Respuesta

3

Creo que tanto el Apache Portable Runtime como las bibliotecas GLib de GTK + tienen API de socket. Como su pregunta está etiquetada c y c++, sospecho que realmente quiere respuestas centradas en C++, pero ambas son buenas como bibliotecas de C puro.

+0

Apache Portable Runtime es una buena sugerencia.Apache también lo usa, así que creo que sería estable, escalable y con buen rendimiento. GLib tiene soporte total de UNIX pero es compatible con Windows en parcial. – ata

13

Considere la posibilidad de mirar boost?

+1

boost.asio también está disponible como un paquete independiente. http://think-async.com/Asio/ – KitsuneYMG

8

QT si no es demasiado grande para usted. Boost tiene un código de red también. wxWidgets tiene con wxNet una biblioteca de red también. Otra lib es Clanlib. Y por supuesto SDL

3

Sí, llegará muy lejos con un envoltorio alrededor de Winsock y tomas estándar de Berkeley. De hecho, las diferencias son tan pequeñas que es casi posible hacerlo con #ifdef directamente en el código.

Es decir, si está dispuesto a trabajar en el nivel de socket. Si buscas algo más abstracto, por supuesto que envolverlo te brinda una buena oportunidad para ocultar las diferencias.

En particular, Winsock:

  • requiere que "ponerlo en marcha" llamando WSAStartup() antes que cualquier otra función de socket
  • no permite que usted utilice antiguo cerca llano() en un socket; debe usar closesocket()
  • Requiere que use WSAGetLastError() para obtener el último error, no simple errno.

Esas son las tres principales en mi cabeza, podría haber más.

+1

¿Por qué? Se ha realizado docenas de veces antes y dudo que no puedas encontrar la interfaz que te gusta. –

+0

@Chris: ¿Por qué qué? :) ¿Por qué trabajar en el nivel de socket? No lo sé, a veces tiene sentido, pero igual puede que quieras ser portátil. – unwind

+0

Estoy pensando en escribir una clase (resumen si es necesario) que ocultará las diferencias. Puedo derivar de esa clase un implemento para winsock y sockets de Linux o cualquier otra biblioteca. Eso es si no encuentro una biblioteca pequeña y eficiente. – ata

4

¡ACE puede ayudarle!

Este tutorial proporciona una visión general de la capa de adaptación ACE OS y el diseño y uso de sus envolturas C++ Socket

Developing Efficient and Portable Communication Software with ACE and C++

+0

Si echa un vistazo a ACE, no se sienta abrumado por el tamaño. La biblioteca central de ACE tiene clases de TCP y UDP fáciles de usar. La documentación en línea es bastante referencia. Obtenga el libro "ACE Programmer's Guide" para aprender cómo usarlo. – zooropa

1

Si quieres un muy ligero, C++ solamente, iostreams de estilo envoltorio alrededor de los zócalos BSD, podría considerar skstream - es simple y funciona bien. Por supuesto, la interfaz iostreams en sí misma deja mucho que desear. Sin embargo, skstream selecciona wrap y el manejo de socket de muy bajo nivel para usted muy bien.

-2

Solo hay una respuesta correcta aquí. OpenSSL. Porque una vez que tienes un código de socket, vas a querer hacer conexiones SSL también.Si ya está trabajando en un marco de plataforma cruzada particular, los enlaces de OpenSSL ya podrían estar disponibles. No creo que haya muchas excusas para que SSL/TLS no permita su aplicación desde el primer momento.

+1

lo siento, pero estamos hablando de programación de socket, no de capa de sesión o seguridad. – Test

3

Otra opción que puedes probar es Poco. Poco tiene mucho más que zócalos, así que si necesitas otras cosas también puede proporcionar.

Comparándolo con otros conjuntos de herramientas:

  1. Qt GUI y tiene algunas características muy sofisticadas que no encontrará en Poco, pero es mucho más grande.
  2. Boost no tiene tanto como Poco en el camino de la funcionalidad real, pero tiene bibliotecas como contenedores de referencia, MPL y preprocesador que no se pueden encontrar en ningún otro lado.
  3. No recuerdo muy bien ACE, pero recuerdo que era muy grande en términos de código fuente y componentes. ACE parece usarse para aplicaciones de red de muy alto rendimiento, por lo que puede ser excesivo. Pero, de nuevo, no estoy muy seguro.

Sólo mis dos centavos

+0

De la lista de plataformas compatibles, no puedo encontrar UNIX/Linux. Por otro lado, han puesto más énfasis en las plataformas integradas. – ata

+1

Plataformas soportadas de Poco? Ellos son compatibles con Unix/Linux. Está en la página de inicio en la parte inferior: Linux; HP-UX; Tru64; Solaris. Todos estos son sistemas operativos Unix o Unix. – blwy10

Cuestiones relacionadas