Welcome

首页 / 软件开发 / .NET编程技术 / socket编程与线程模型二

socket编程与线程模型二2010-12-14 cnblogs worldreasonWinsock是windows系统上的一个网络通信API编程接口。TCP/IP协议栈只是 winsock通信的一个子集,winsock还可以支持除了tcp/ip之外的其它协议栈。 BSD socket是unix上tcp/ip协议栈的编程接口,所以winsock和BSD套接字包含的 协议栈不一样。所以winsock编程中对于需要榜定的地址必须说明协议族和地址 类型等。因为它可以支持很多通信协议。

winsock说明

图中紫色的长方形代表数据缓冲区,网卡和协议栈都有缓冲区。数据到达以 后,首先在网卡的缓冲区。这个时候,通过网卡驱动数据被拷贝到数据所属的协 议栈的缓冲区。最后,应用程序可以从协议栈的缓冲区把数据取走。当应用程序 发送数据,数据就会首先被缓存到协议栈的缓冲区,协议栈在适当的时候就会通 过网卡驱动把数据拷贝到网卡的缓冲区,最后数据就被网卡驱动发送到物理网络 上。但是需要明确,网卡的数据缓冲区比协议栈的小的多。所以,协议栈的缓冲 区内容是不断的积累网卡缓冲区内容的结果。

2、采用大缓冲区

Winsock API可以让程序员设置整个协议栈缓冲区的大小。把这个缓冲区设置 的大一点可以接受更多的客户同时发送数据,也可以支持暂时缓存应用程序发送 的数据。

也就是采用大缓冲区的时候,远端的发送程序不会因为协议栈缓存满而发送 失败;本地的应用程序也不会因为缓存满而发送失败。或者在流式套接字的时候 是发送被阻塞。

3、采用重叠I/O

采用重叠I/O可以提高应用程序收发数据的效率。

如图所示,采用重叠I/O以后数据就会直接从网卡的数据缓冲区拷贝到应用程 序的数据缓冲区,从而减少了协议栈的一个数据缓冲环节,消除了很多内存拷贝 操作。从而提高了应用程序的效率。

overlapped IO