0
從下面的代碼中,我需要添加什麼代碼才能知道客戶端何時連接到服務器? 謝謝! :d您如何知道客戶端何時連接到服務器?
int sd, rc;
socklen_t cliLen;
struct sockaddr_in cliAddr, servAddr;
char* argv = (char*) arg;
/* socket creation */
sd=socket(AF_INET, SOCK_DGRAM, 0);
if(sd<0)
{
printf("%s: cannot open socket \n",argv);
// exit(1);
}
/* bind local server port */
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(LOCAL_SERVER_PORT);
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
if(rc<0)
{
printf("%s: cannot bind port number %d \n",
argv, LOCAL_SERVER_PORT);
// exit(1);
}
printf("%s: waiting for data on port UDP %u\n",argv,LOCAL_SERVER_PORT);
while(1)
{
/* init buffer */
memset(msg,0x0,MAX_MSG);
/* receive message */
n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *) cliAddr,sizeof(cliAddr));
}
由於這是通過UDP(連接)來完成,我們無法知道什麼時候該客戶端已連接。有沒有辦法讓我們知道誰發送了數據?
UDP添加
是無連接的;沒有人「連接」。當你得到數據時,你知道你有數據。 – 2012-07-27 07:36:13
從技術上講,一個「連接()」只發生在流(在3路TCP握手成功並且你的服務器的「accept()」給你一個新的套接字之後)。 *無*這發生在數據報。你的代碼看起來很好。 – paulsm4 2012-07-27 07:37:55
@BrianRoach感謝您的回覆!有沒有什麼方法可以確定誰將數據發送到服務器?因爲我需要做diffie-hellman協議來交換密鑰,然後在發送給用戶時加密數據。 – mister 2012-07-27 07:40:39