Cокетный чат, клиент и сервер одно приложение. Kак сделать так, чтобы тот кто первый запустил прогу становился сервером, а остальные подключались уже к нему.

a) рассылаешь broadcast message
b) слушаешь ответы
с-1) нет ответов - ставится флажок "я сервер"
c-2) ответ есть - "я клиент"; connect to server ; goto exit;
d) ждём клиентов
...
x) пришёл broadcast message
y) отвечаешь на него "сервер здесь"
SOCKET sock = socket ( AF_INET, SOCK_DGRAM, 0 );
BOOL fBroadcast = TRUE;
int err = setsockopt ( sock, 
SOL_SOCKET,
SO_BROADCAST,
(CHAR *) &fBroadcast,
sizeof ( BOOL )
);
if ( SOCKET_ERROR == err )
{
// handle error
}
// bind to a local socket and an interface.
SOCKADDR_IN saUdpServ, saUdpCli;
saUdpCli.sin_family = AF_INET;
saUdpCli.sin_addr.s_addr = htonl(INADDR_ANY );
saUdpCli.sin_port = htons ( 0 );
err = bind ( sock, (SOCKADDR *) &saUdpCli, sizeof (SOCKADDR_IN) );
if ( SOCKET_ERROR == err )
{
}
// Fill an IP address structure, to send an IP broadcast. The 
// packet will be broadcasted to the specified port.
//
saUdpServ.sin_family = AF_INET;
saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );
saUdpServ.sin_port = htons ( usEndPoint );

lstrcpy ( achMessage, "A Broadcast Datagram" );

err = sendto ( sock, achMessage, lstrlen ( achMessage ), 
	  0,(SOCKADDR *) &saUdpServ, sizeof ( SOCKADDR_IN ));
          

TopList Rambler's Top100