我在写服务使用socket端绑定端口号和ip的时候,发现sockaddr_in需要绑定很多参数,创建完对象_sin后需要传入参数网络类型AF_INET和端口port,还有ip。然后将sockaddr_in和服务端对象的_sock绑定。
然而当我用sockaddr_in去接收accept的时候发现sockaddr_in没有那么多传入参数,甚至只是创建了一个sockaddr_in的对象clientAddr就直接传入了。我很纳闷,客户端的参数在哪呢?是不是任何一个客户端都可以accept?
后来发现还真是
cSock = accept(_sock, (sockaddr*)&clientAddr, &nAddrLen);
服务程序调用accept函数从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道。
这句话的意思是,创建一个新的socket套接字,关于正在监听的socket:_sock,新创建的socket的地址结构为(sockaddr*)&clientAddr,新套接字的长度为nAddrLen。如果成功,就返回这个新的socket的描述符cSock,不成功就返回无效socket。
绑定服务端socket
//1.先用sockaddr_in类定义的对象 绑定端口和ip
if (INVALID_SOCKET == _sock)
{
InitSocket(