⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d071.bmp.txt

📁 Visual C++通信编程工程实例精解(附盘)
💻 TXT
字号:
到所支持的地址族。不过一般来说,对于TCP/IP编程,都会设置为AF_INET。Type是Socket
协议类型。Winsock2.h中列出了5种类型,我们一般会使用其中的3种,SOCK_STREAM
表示流协议,SOCK DGRAM表示数据报协议,SOCK_RAW表示原始套接字。Protocol为
协议号,说明该套接字所处理的协议,它的可选值随前面两个参数的不同而不同。
    3.捆绑本地地址
    每个套接字必须有一个地址才能和对方通信。bind函数用于捆绑地址,它的函数原型为:
    int bind(SOCKET s, const struct sockaddr* name, int namelen);
    其中,s为套接字号;name为地址信息;namelen为地址结构的长度,加入这个参数的
原因也就是因为不同协议有不同的结构。需要注意的是,套接字是给多种协议共享的,sockaddr
结构只是一个占位符,不同协议使用不同的地址结构,如TCPfIP编程使用的结构是
sockaddr_in。
    需要注意的是,bind函数只能给socket绑定本机的IP地址。如果你给出的地址信息是
其他机器的,则必然会失败。此时该函数返回SOCKET_ERROR.WSAGetLastError则返回
WSAEADDRNOTAVAIL。
    如果没有特殊需求,应该设置该结构的IP地址为INADDR_ANY,它允许套接字可以
向任何分配给本地机器的IP地址发送或者接收数据。对于端口,服务端套接字需要指定一
个端口,而客户端端口最好设置为0,让系统选择一个可用端口。
    4.进入侦听状态
    当创建一个套接字,并绑定了地址后,需要设置这个套接字进入侦听状态。进入侦听状
态后,该套接字就可以处理来自客户端的连接请求。
    listen函数设置套接字进入侦听状态,其函数原型为:
    int listen(SOCKET s, int backlog);
    对于刚开始编程的人,最容易误解的是backlog参数。许多人以为这就是该套接字最多
能接收的链接的数目。实际上,一个套接字能接受的链接的数目不受这个参数控制,它只受
系统资源的限制。例如对于Linux,套接字用文件句柄实现,那么它可能受最大文件句柄数
的限制。这个参数的含义是最多未决连接的数目,也就是连接请求已经到了服务端的套接字,
但是用户还没有调用accept的套接字数目。对于WinSock2,这个参数最大值为5。
  5.accept循环
  一个套接字处于侦听状杰以后,就可以循环调用accept来接受新连接。accept函数的原
型如下:
    SOCKET accept(SOCKET s. struct sockaddr* addr, int* addrlen);
    这个函数的参数说明和前面bind的一样。需要说明的是,在MSDN中将后面两个参数
都讲解为out参数,经过测试,结论并不一样。对于addrlen参数,应该是一个in/out参数,
也就是说,如果第二个参数是一个结构指针,则第三个参数必须是一个整型变量的指针,该
整型变量还必须被设置为该结构的长度。
    6.WSAAsyncSelect()函数
    此函数要求某- Socket有事件(event)发生时通知使用者。函数原型如下:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -