Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 您如何知道客户端何时连接到服务器?_C++_Sockets_Networking_Ubuntu - Fatal编程技术网

C++ 您如何知道客户端何时连接到服务器?

C++ 您如何知道客户端何时连接到服务器?,c++,sockets,networking,ubuntu,C++,Sockets,Networking,Ubuntu,从下面的代码中,我需要添加什么代码才能知道客户端何时连接到服务器? 谢谢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);

从下面的代码中,我需要添加什么代码才能知道客户端何时连接到服务器? 谢谢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));
}
int-sd,rc;
socklen_t cliLen;
cliAddr、servAddr中的结构sockaddr\u;
char*argv=(char*)arg;
/*套接字创建*/
sd=插座(AF INET,SOCK DGRAM,0);

如果(sd您正在使用表示UDP套接字的
SOCK_DGRAM

UDP与TCP不同,实际上没有“连接”,您只需发送数据包并希望它们到达目标

但是,如果您想指出收到某物的事实,可以添加

printf("Recieved data"); 
之后


您正在使用表示UDP套接字的
SOCK_DGRAM

UDP与TCP不同,实际上没有“连接”,您只需发送数据包并希望它们到达目标

但是,如果您想指出收到某物的事实,可以添加

printf("Recieved data"); 
之后


UDP是无连接的;从来没有人“连接”。当…你得到数据时,你就知道你有数据。从技术上讲,“连接()”只在流中出现(在三方TCP握手成功并且你的服务器的“接受()”为你提供了一个新的套接字之后)。所有这些都不会发生在数据报上。您的代码看起来很好。@BrianRoach谢谢您的回复!那么有没有办法确定是谁向服务器发送了数据?因为我需要使用diffie-hellman协议来交换密钥,然后在发送给用户时对数据进行加密。@paulsm4,好吧,当您使用TCP时,您有三次握手o建立连接。因此,如果成功,可以说连接已建立。@dup-您可以从要传入的
struct sockaddr
中获取客户端IP(cliAddr)-当收到数据时,它会被填写。除此之外,您还需要发送的数据也包含标识符信息。UDP是无连接的;没有人“连接”。您知道您在…获取数据时有数据。从技术上讲,“连接()”只会在流中出现(在三向TCP握手成功且您的服务器“接受()”之后)给你一个新的插座)。所有这些都不会发生在数据报上。您的代码看起来很好。@BrianRoach谢谢您的回复!那么有没有办法确定是谁向服务器发送了数据?因为我需要使用diffie-hellman协议来交换密钥,然后在发送给用户时对数据进行加密。@paulsm4,好吧,当您使用TCP时,您有三次握手o建立连接。因此,如果成功,可以说连接已建立。@dup-您可以从要传入的
struct sockaddr
中获取客户端IP(cliAddr)-它在接收数据时被填充。除此之外,您还需要发送的数据也包含标识符信息。