En la programación de sockets, ¿cómo obtener el segundo parámetro de la función aceptar()?
El segundo parámetro de la función aceptar() es la dirección de la solicitud de conexión, por lo que la dirección de la computadora que solicita la conexión se extrae de la cola de conexión. Simplemente inicialícelo a nulo.
Prototipo de función: int aceptar(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
Parámetros
sockfd: descriptor del socket, el El socket escucha para conexiones después de escuchar().
addr: (opcional) puntero a un buffer que recibe la dirección de la entidad de conexión conocida por la capa de comunicación. El formato real del parámetro Addr está determinado por la familia de direcciones generada cuando se creó el socket.
addrlen: puntero (opcional), parámetro de entrada, usado junto con addr, que apunta a un número entero que almacena la longitud de la dirección addr.
Ejemplo: #ifndef?UNICODE
#defineUNICODE
#endif
#include?
#include?
#include?
//NeedtolinkwithWs2_32.lib
#pragmacomment(lib, "Ws2_32.lib")
int?wmain(void)
{
WSADATAwsaData?;
intiResult=WSAStartup(MAKEWORD( 2,2),&wsaData);
if(iResult!=NO_ERROR)
{
wprintf(L?"WSAStartupfailedwitherror:%ld\n", iResultado);
retorno?1?;
}
SOCKETListenSocket?;
ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) ;
if(ListenSocket==INVALID_SOCKET)
{
wprintf(L?"socketfailedwitherror:%ld\n",WSAGetLastError()); p> p>
WSACleanup();
retorno?1?;
}
sockaddr_inservice?;
servicio. sin_family= AF_INET?;
service.sin_addr.s_addr=inet_addr("127.0.0.1");
service.sin_port=htons(27015);
if( bind(ListenSocket,
(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR)
{
wprintf(L"bindfailedwitherror:% ld\ n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return?1?;
}
if(listen(ListenSocket,1)==SOCKET_ERROR)
{
wprintf(L"listenfailedwitherror:%ld\n",WSAGetLastError () );
closesocket(ListenSocket);
WSACleanup();
retorno?1?;
}
SOCKETAcceptSocket?;
wprintf(L?"Waitingforclienttoconnect...\n");
//Aceptarlaconexión.
AcceptSocket=accept( ListenSocket, NULL,NULL);
if(AcceptSocket==INVALID_SOCKET)
{
wprintf(L?"acceptfailedwitherror:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup(); p>
WSACleanup();
p>
¿regresar?1?;
}
¿otra cosa?
wprintf(L?"Clienteconectado.\n");
closesocket(ListenSocket);
WSACleanup();
return?0?;
}