connect函数

来源:互联网 发布:淘宝代购家具是骗局 编辑:程序博客网 时间:2024/05/16 06:37

connect,是QT中的连接函数,将信号发送者sender对象中的信号signal与接受者receiver中的member槽函数联系起来。

功能:将信号发送者sender对象中的信号signal与接受者receiver中的member槽函数联系起来。当指定信号signal时必须使用宏SIGNAL(),当指定槽函数时必须使用宏SLOT(),如果发送者与连接者属于同一个对象时,那么在connect调用中接受者参数可以忽略。


connect函数的原型:

[cpp] view plain copy
  1. WINSOCK_API_LINKAGE  
  2. int  
  3. WSAAPI  
  4. connect(  
  5.     SOCKET s,  
  6.     const struct sockaddr FAR * name,  
  7.     int namelen  
  8.     );  

      第一个参数是客户端的套接字(表明即将发起连接请求),第二个参数是服务端的套接字所在的“地方”(“地方”是我自定义的专有名词),第三个参数是该“地方”的大小。

      如果请求连接成功,则返回0,否则返回错误码。

     

     服务端发起连接请求:

[cpp] view plain copy
  1. SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);  
  2.   
  3. SOCKADDR_IN addrSrv;  
  4. addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  
  5. addrSrv.sin_family = AF_INET;  
  6. addrSrv.sin_port = htons(8888);  
  7. connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR

connect函数的功能是完成一个有连接协议的连接过程,对于TCP来说就是那个三路握手过程,它的函数原型:

#include<sys/socket.h> int connect(int sockfd, const struct sockaddr* server_addr, socklen_t addrlen) 返回:0──成功, -1──失败。

 

connect函数的功能可以用一句话来概括,就是完成面向连接的协议的连接过程,它是主要连接的。面向连接的协议,在建立连接的时候总会有一方先发送数据,那么谁调用了connect谁就是先发送数据的一方。如此理解connect三个参数是容易了,我必需指定数据发送的地址,同时也必需指定数据从哪里发送,这正好是connect的前两个参数,而第三个参数是为第二个参数服务的。

参数sockfd
指定数据发送的套接字,解决从哪里发送的问题。内核需要维护大量IO通道,所以用户必需通过这个参数告诉内核从哪个IO通道,此处就是从哪个socket接口中发送数据。sockfd是先前socket返回的值。
参数server_addr
指定数据发送的目的地,也就是服务器端的地址。这里服务器是针对connect说的,因为connect是主动连接的一方调用的,所以相应的要存在一个被连接的一方,被动连接的一方需要调用listen以接受connect的连接请求,如此被动连接的一方就是服务器了。
参数addrlen
指定server_addr结构体的长度。我们知道系统中存在大量的地址结构,但socket接口只是通过一个统一的结构来指定参数类型,所以需要指定一个长度,以使内核在进行参数复制的时候有个有个界限。

 

与所有的socket网络接口一样,connect总会在某个时候可能失败,此时它会返回-1,相应的errno会被设置,用户可能通过这个值确定是哪个错误。常见的错误有对方主机不可达或者超时错误,也可以是对方主机没有相应的进程在对应端口等待。



原创粉丝点击