Por el lado del cliente TCP:
Uso Gethostbyname a las operaciones de búsqueda de nombres DNS para IP, devolverá una estructura hostent. Llamemos a este host de valor devuelto.
hostent *host = gethostbyname(HOSTNAME_CSTR);
llenar la estructura dirección de socket:
sockaddr_in sock;
sock.sin_family = AF_INET;
sock.sin_port = htons(REMOTE_PORT);
sock.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;
crear un socket y Conexión de llamada:
s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr *)&sock, sizeof(sock))
Por el lado del servidor TCP:
instalación de una toma de
vincular a su dirección a ese socket usando bind.
empezar a escuchar en ese socket con escuchar
aceptación de llamada para conseguir un cliente conectado. < - en este punto genera un nuevo hilo para manejar la conexión mientras realiza otra llamada para aceptar y obtener el próximo cliente conectado.
Comunicación general:
Uso de envío y recv para leer y escribir entre el cliente y el servidor.
ejemplo de código fuente de sockets BSD:
Se puede encontrar un buen código de ejemplo de esto en wikipedia.
Más información:
recomiendo altamente this book y this online tutorial:
4:
Los conectores RAW son muy complicados y son un poco diferentes en diferentes sistemas. Solo estoy al tanto de personas que los usan para codificar sniffers (como 'wireshark') y algunos diagnósticos bastante arcanos. Ciertamente no son un buen lugar para comenzar a aprender la programación de socket. En la mayoría de los casos, "soy un programador/administrador de red de C++ que comienza" significa "mantenerse alejado de SOCK_RAW". –
@ChuckKollars, no estoy de acuerdo. Creo que aprender sockets sin procesar es una gran manera de aprender C++, y especialmente C. Usar una biblioteca es una cosa, pero los sockets crudos con Linux son una experiencia muy perspicaz. C++ puede hacer muchas cosas únicas. Creo que evitar el dolor de corazón que implica es un error. – motoku
¿Qué sistema exactamente tienes? Las implementaciones de socket "en bruto" difieren considerablemente de un sistema a otro, por lo que lo que aprende (en realidad, más que todo sobre el sistema, no sobre C++) no se traslada a otro lado. –