接字。
? ncom:要连接服务器的套接字地址结构。
? ncomlen:ncom 参数的长度。
如果连接成功,此函数返回0;失败则返回SOCKET_ERROR。
对于服务器来说,当客户机发来连接请求后,服务器要调用accept()函数来响应对方的连
接请求,该函数原型如下:
SOCKET accept(SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen);
各参数意义如下。
? s:处在jiān tīng(下小节介绍)模式下的套接字。
? addr:在函数调用过程中被填充发出连接请求的客户机的IP 地址信息。
? addrlen:addr 参数的长度。
如果成功,则返回一个新的套接字,它对应于已经接受的那个客户机连接。对于该客户
机所有的后续cāo作,都使用这个新的套接字。原来的套接字则仍处于jiān tīng模式,继续接受其
他客户机的连接。如果失败,则返回INVALID_SOCKET。
11.2.5 jiān tīngsocket
对于服务器端来说,在它接受客户机的连接之前,首先要jiān tīng。只有进入了jiān tīng模式,
才能接受来自客户机的连接。这一点可以通过listen()函数实现,它的原型如下:
int listen(SOCKET s, int backlog);
各参数意义如下。
? s:进行jiān tīng的套接字。
? backlog:正在等待连接的最大队列的长度。如果backlog 的值为3,有4 个客户机同
时发出连接请求,则前3 个会放在等待连接队列中,最后一个将被忽略。
如果函数成功,则返回0;否则返回SOCKET_ERROR。
11.2.6 数据传输
当客户机和服务器的连接建立起来以后,便可以进行数据的传输。数据的传输是网络通
信的最终目的,前面所作的工作就是为了客户机可以和服务器传输数据。数据传输又包括数
据发送和数据接收。
1.数据发送
数据发送是通过send()函数来实现的,它的原型如下:
int send(SOCKET s, const char FAR *buf, int len, int flags);
各参数意义如下。
? s:已经建立连接的套接字。
? buf:字符缓冲区,区内包含即将发送的数据。
? len:缓冲区内的字符数目。
? flags:指定数据传输方式,取值可为0、MSG_DONTROUTE 和MSG_OOB,或者是
枫叶文学网www.fywxw.com
第11 章 网络编程
·285·
这些取值进行按位或运算的结果。其中,0 表示无特殊行为;MSG_DONTROUTE 表
示传输层不要将它发出的包路由出去;MSG_OOB 表示数据应该被带外发送。
如果发送成功,则返回发送的字节数,如果失败则返回SOCKET_ERROR。
2.数据接收