COKET s struct sockaddr FAR addrint FAR addrlen 参数:s:Socket 的识别码;addr:存放来连接的客户端的地址;addrlen:addr 的长度6)结束 socket 连接 结束服务器和客户端的通信连接是很简单的,这一过程可以由服务器或客户机的任一端启动,只要调用 closesocket就可以了,而要关闭 Server 端监听状态的 socket,同样也是利用此函数。
另外,与程序启动时调用 WSAStartup憨数相对应,程式结束前,需要调用 WSACleanup 来通知 Winsock Stack 释放 Socket 所占用的资源。
这两个函数都是调用成功返回 0,否则返回 SOCKET_ERROR。
int PASCAL FAR closesocket SOCKET s 参 数:s:Socket 的识别码;int PASCAL FAR WSACleanup void 参 数: 无二、客户端 Socket 的操作 1)建立客户端的 Socket 客户端应用程序首先也是调用 WSAStartup 函数来与 Winsock 的动态连接库建立关系,然后同样调用 socket 来建立一个 TCP 或 UDP socket(相同协定的 sockets 才能相通,TCP 对 TCP,UDP 对UDP)。
与服务器端的 socket 不同的是,客户端的 socket 可以调用 bind 函数,由自己来指定 IP 地址及 port 号码;但是也可以不调用 bind,而由 Winsock 来自动设定 IP 地址及 port 号码。
2)提出连接申请 客户端的 Socket 使用 connect函数来提出与服务器端的 Socket 建立连接的申请,函数调用成功返回0,否则返回 SOCKET_ERROR。
int PASCAL FAR connect SOCKET s const struct sockaddr FAR name int namelen 参 数:s:Socket 的识别码;name:Socket 想要连接的对方地址;namelen:name 的长度三、数据的传送 虽然基于 TCP/IP 连接协议(流套接字)的服务是设计客户机/服务器应用程序时的主流标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。
先介绍一下 TCP socket 与 UDP socket 在传送数据时的特性:Stream TCP Socket 提供双向、可靠、有次序、不重复的资料传送。
Datagram UDP Socket虽然提供双向的通信,但没有可靠、有次序、不重复的保证,所以 UDP 传送数据可能会收到无次序、重复的资料,甚至资料在传输过程中出现遗漏。
由于 UDP Socket 在传送资料时,并不保证资料能完整地送达对方,所以绝大多数应用程序都是采用 TCP 处理 Socket,以保证资料的正确性。
一般情况下 TCP Socket的数据发送和接收是调用 send 及 recv 这两个函数来达成,而 UDP Socket 则是用 sendto 及recvfrom 这两个函数,这两个函数调用成功返回发送或接收的资料的长度,否则返回 SOCKET_ERROR。
int PASCAL FAR send SOCKET s const char FAR bufint len int flags 参数:s:Socket 的识别码buf:存放要传送的资料的暂存区len buf:的长度flags:此函数被调用的方式 对于 Datagram Socket 而言,若是 datagram 的大小超过限制,则将不会送出任何资料,并会传回错误值。
对 Stream Socket 言,Blocking 模式下,若是传送系统内的储存空间不够存放这些要传送的资料,send将会被 block 住,直到资料送完为止;如果该 Socket 被设定为 Non-Blocking 模式,那么将视目前的 output buffer 空 间 有 多 少 , 就 送 出 多 少 资 料 , 并 不 会 被 block 住 。
flags 的 值 可 设 为 0 或MSG_DONTROUTE 及 MSG_OOB 的组合。
int PASCAL FAR recv SOCKET s char FAR buf int len int flags 参数:s:Socket 的识别码buf:存放接收到的资料的暂存区len buf:的长度flags:此函数被调用的方式对 Stream Socket 言,我们可以接收到目前 input buffer 内有效的资料,但其数量不超过 len 的大小。
上一篇:
C语言编程实现贪食蛇游戏
下一篇:
2020年湖南成人高考专升本的优势参考资料