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 (コネクションレス) を介して行われるため、クライアントがいつ接続したかを知ることはできません。誰がデータを送信したかを知る方法はありますか?

4

1 に答える 1

3

SOCK_DGRAMUDPソケットを示す使用しています。

UDP は TCP とは異なり、実際には「接続」はありません。データのパッケージを送信して、ターゲットに到達することを期待するだけです。

ただし、何かを受け取ったという事実を示したい場合は、追加できます

printf("Recieved data"); 

 n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *) cliAddr,sizeof(cliAddr));
于 2012-07-27T07:37:44.330 に答える