Compartir a través de


Windows Sockets: secuencia de operaciones

En este artículo se muestra, en paralelo, la secuencia de operaciones para un socket de servidor y un socket de cliente.Dado que los sockets utilizan objetos de CArchive , son necesariamente sockets de secuencia.

Secuencia de operaciones para una comunicación de socket de secuencia

Hasta el punto de construir un objeto de CSocketFile , la secuencia siguiente es exacta (con algunas diferencias de parámetro) para CAsyncSocket y CSocket.a partir de ese momento, la secuencia está estrictamente para CSocket.La tabla siguiente muestra la secuencia de operaciones para colocar la comunicación entre un cliente y un servidor.

Comunicación entre la creación un Servidor y un cliente

Servidor

Cliente

// construct a socket

CSocket sockSrvr;

// construct a socket

CSocket sockClient;

// create the SOCKET

sockSrvr.Create(nPort);1,2

// create the SOCKET

sockClient.Create( );2

// start listening

sockSrvr.Listen( );

 

 

// seek a connection

sockClient.Connect(strAddr, nPort);3,4

// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5

 

// construct file object

CSocketFile file(&sockRecv);

// construct file object

CSocketFile file(&sockClient);

// construct an archive

CArchive arIn(&file, CArchive::load);

O bien

CArchive arOut(&file,CArchive::store);

– ambos – 

// construct an archive

CArchive arIn(&file, CArchive::load);

O bien

CArchive arOut(&file,CArchive::store);

 – ambos – 

// use the archive to pass data:

arIn >> dwValue;

O bien

arOut << dwValue;6

// use the archive to pass data:

arIn >> dwValue;

O bien

arOut << dwValue;6

1.Donde es un número de puerto nPort .Vea Windows Sockets: Puertos y direcciones de socket para obtener más información sobre puertos.

2.El servidor debe especificar siempre un puerto para que los clientes pueden conectarse.La llamada de Create a veces también especifica una dirección.En el cliente, utilice los parámetros predeterminados, que pide a MFC utiliza cualquier puerto disponible.

3.Donde es nPort un número de puerto y un strAddr es una dirección de equipo o dirección (IP) de protocolo de Internet.

4.Las direcciones de equipo pueden tomar varios formularios: “ftp.microsoft.com”, “microsoft.com”.Los IP utilizan el formato “127.54.67.32” “número dotted”.Los controles de ejecución de Conectar comprueba si la dirección es un número dotted (aunque no comprueba para asegurarse el número son equipo válido en la red).Si no, Conectar supone un nombre de equipo de uno de los otros formularios.

5.Cuando se llama a Aceptar en el servidor, se pasa una referencia a un nuevo objeto de socket.Debe construir este objeto primero, pero no llama a Create para él.Tenga presente que si este objeto de socket sale del ámbito, la conexión se cierra.MFC conecta el nuevo objeto a un identificador de SOCKET .Puede crear el socket en la pila, como se muestra, o en la pila.

6.El archivo y el archivo de socket se cierran cuando salen del ámbito.El destructor del objeto de socket también llama a la función miembro de Cerrar para el objeto de socket cuando el objeto salga del ámbito o eliminan.

Notas adicionales Sobre la secuencia

La secuencia de llamadas que se muestran en la tabla anterior es para un socket de secuencia.Los sockets de datagrama, que se sines conexión, no requieren las llamadas de CAsyncSocket::Connect, de Escucha, y de Aceptar (aunque puede utilizar opcionalmente Conectar).En su lugar, si utiliza la clase CAsyncSocket, sockets de datagrama utilizan CAsyncSocket::SendTo y el miembro de ReceiveFrom funciona.(Si usa Conectar con un socket de datagrama, se utiliza send y Receive.) Dado que CArchive no funciona con los datagramas, no utilice CSocket con un archivo si el socket es un datagrama.

CSocketFile no admite toda la funcionalidad de los entity_CODECFile; los miembros de CFile como Seek, que no tienen ningún sentido para una comunicación de socket, no están disponibles.Debido a esto, algunas funciones de MFC Serialize predeterminado no son compatibles con CSocketFile.Esto es especialmente cierto de la clase de CEditView .No debe intentar serializar los datos de CEditView a través de un objeto de CArchive asociado a un objeto de CSocketFile mediante CEditView::SerializeRaw; uso CEditView::Serialize en su lugar (no documentado).La función de SerializeRaw espera que el objeto de archivo tiene funciones, como Seek, que CSocketFile no admite.

Para obtener más información, vea:

Vea también

Referencia

CSocket (Clase)

CAsyncSocket::Create

CAsyncSocket::Close

Conceptos

Windows Sockets en MFC