Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 usan CArchive objetos, son necesariamente sockets de flujo.
Secuencia de operaciones para una comunicación de socket de flujo
Hasta el punto de construir un CSocketFile objeto, la siguiente secuencia es precisa (con algunas diferencias de parámetros) para y CAsyncSocketCSocket. Desde ese momento, la secuencia es estrictamente para CSocket. En la tabla siguiente se muestra la secuencia de operaciones para configurar la comunicación entre un cliente y un servidor.
Configurar la comunicación entre un servidor y un cliente
| Servidor | Cliente |
|---|---|
// construct a socketCSocket sockSrvr; |
// construct a socketCSocket sockClient; |
// create the SOCKETsockSrvr.Create(nPort);1,2 |
// create the SOCKETsockClient.Create( );2 |
// start listeningsockSrvr.Listen( ); |
|
// seek a connectionsockClient.Connect(strAddr, nPort);3,4 |
|
// construct a new, empty socketCSocket sockRecv;// accept connectionsockSrvr.Accept( sockRecv ); 5 |
|
// construct file objectCSocketFile file(&sockRecv); |
// construct file objectCSocketFile file(&sockClient); |
// construct an archiveCArchive arIn(&file, CArchive::load);-o- CArchive arOut(&file, CArchive::store);- o ambos - |
// construct an archiveCArchive arIn(&file, CArchive::load);-o- CArchive arOut(&file, CArchive::store);- o ambos - |
// use the archive to pass data:arIn >> dwValue;-o- arOut << dwValue;6 |
// use the archive to pass data:arIn >> dwValue;-o- arOut << dwValue;6 |
Donde nPort es un número de puerto. Consulte Windows Sockets: Puertos y direcciones de socket para obtener más información sobre los puertos.
El servidor siempre debe especificar un puerto para que los clientes puedan conectarse. La
Createllamada a veces también especifica una dirección. En el lado cliente, use los parámetros predeterminados, que solicitan a MFC que usen cualquier puerto disponible.Donde nPort es un número de puerto y strAddr es una dirección de máquina o una dirección de Protocolo de Internet (IP).
Las direcciones de máquina pueden tener varias formas: "ftp.microsoft.com", "microsoft.com". Las direcciones IP usan el formato "número de puntos" "127.54.67.32". La
Connectfunción comprueba si la dirección es un número de puntos (aunque no comprueba si el número es un equipo válido en la red). Si no es así,Connectsupone un nombre de máquina de uno de los otros formularios.Cuando se llama
Accepten el lado servidor, se pasa una referencia a un nuevo objeto de socket. Primero debe construir este objeto, pero no llamarCreatea él. Tenga en cuenta que si este objeto de socket se sale del ámbito, la conexión se cierra. MFC conecta el nuevo objeto a un identificador SOCKET . Puede construir el socket en la pila, como se muestra o en el montón.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 Close para el objeto socket cuando el objeto sale del ámbito o se elimina.
Notas adicionales sobre la secuencia
La secuencia de llamadas que se muestran en la tabla anterior es para un socket de flujo. Los sockets de datagrama, que no tienen conexión, no requieren las llamadas CAsyncSocket::Connect, Listen y Accept (aunque opcionalmente puede usar Connect). En su lugar, si usa la clase CAsyncSocket, los sockets de datagrama usan las CAsyncSocket::SendTo funciones miembro y ReceiveFrom . (Si usa Connect con un socket de datagrama, use Send y Receive). Dado CArchive que no funciona con datagramas, no use CSocket con un archivo si el socket es un datagrama.
CSocketFile no admite toda la funcionalidad CFile de CFile; los miembros como Seek, que no tienen sentido para una comunicación de socket, no están disponibles. Por este motivo, algunas funciones MFC Serialize predeterminadas no son compatibles con CSocketFile. Esto es especialmente cierto en la CEditView clase . No debe intentar serializar CEditView los datos a través de un CArchive objeto adjunto a un CSocketFile objeto mediante CEditView::SerializeRaw; use CEditView::Serialize en su lugar (no documentado). La función SerializeRaw espera que el objeto de archivo tenga funciones, como Seek, que CSocketFile no admite.
Para obtener más información, consulte:
Consulte también
Windows Sockets en MFC
CSocket (clase)
CAsyncSocket::Create
CAsyncSocket::Close