Winsock程序设计初步之<一> Winsock编程原理

原创 2001年05月13日 17:30:00

      本课程主要讲Windows中TCP/IP编程接口Winsock,版本为1.1。高版本的Winsock实际与1.1版相差不多,主要是进行了一些扩充,如可超越TCP/IP协议直接用socket来实现IPX、NETBIOS等其它通信协议。

这叙述方便在本文的其余部分中提到的Winsock指的就是Winsock1.1。

通过Winsock可实现点对点或广播通信程序,实际这两者之间的区别不大,编程时其程序流程所用代码几乎相同,不同的地方在于目标地址选择的不同。本课程中所举实例为点对点的形式,并以客户/服务器形式来构建通过Winsock进行通信的点对点通信,并对通信过程的两点分别命名为Server和Client。

为更清楚的说明出Winsock的结构原理,下面以电信局的普通电话服务为比较对象进行说明:

1、电信局提供电话服务类似版主们这的Server,普通电话用户类似版主们这的Client。

2、首先电信局必须建立一个电话总机。这就如果版主们必须在Server端建立一个Socket(套接字),这一步通过调用socket()函数实现。

3、电信局必须给电话总机分配一个号码,以便使用户要拨找该号码得到电话服务,同时接入该电信局的用户必须知道该总机的号码。同样,版主也在Server端也要为这一套接字指定一port(端口),并且要连接该Server的Client必须知道该端口。这一步通过调用bind()函数实现。

4、接下来电信局必须使总机开通并使总机能够高效地监听用户拨号,如果电信局所提供服务的用户数太多,你会发现拨打电信局总机老是忙音,通常电信局内部会使该总机对应的电话号码连到好几个负责交换的处理中心,在一个处理中心忙于处理当前的某个用户时,新到用户可自动转到一下处理中心得到服务。同样版主们的Server端也要使自己的套接口设置成监听状态,这是通用listen()函数实现的,listen()的第二个参数是等待队列数,就如同你可以指定电信局的建立几个负责交换的处理中心。

5、用户知道了电信局的总机号后就可以进行拨打请求得到服务。在Winsock的世界里做为Client端是要先用socket()函数建立一个套接字,然后调connect()函数进行连接。当然和电话一样,如果等待队列数满了、与Server的线路不通或是Server没有提供此项服务时,连接就不会成功。

5、电信局的总机接受了这用户拨打的电话后负责接通用户的线路,而总机本身则再回到等待的状态。Server也是一样,调用accept()函数进入监听处理过程,Server端的代码即在中处暂停,一旦Server端接到申请后系统会建立一个新的套接字来对此连接做服务,而原先的套接字则再回到监听等待的状态。

6、当你电话挂完了,你就可以挂上电话,彼此间也就离线了。Client和Server间的套接字的关闭也是如此;这个关闭离线的动作,可由Client端或Server端劝嬷骰方先关闭。有些电话查询系统不也是如此吗?关闭套接字的函数为

closesocket()

从以上情况可以看出在服务器端建立一个套接字,并进入实际的监听步骤的过程如下:socket()->bind()->listen()->accept()

那么在accept()完了后,版主们说在Server端将生成一个新的套接字,然后Server将继续进入accept()状态,版主们该如何用这个新的套接字来进行与Client端的通信呢,这就用到了recv()函数,而Client端则是通过send()函数来向服务器发信息的。

在客户端也是采取类似的过程,其调用Winsock的过程如下:

socket()->connect()->send()

首先建立一个socket,然后用connect()函数将其与Server端的socket连接,连接成功后调用send()发送信息。

Winsock程序设计初步之 Winsock编程原理

Winsock程序设计初步之 Winsock编程原理     本课程主要讲Windows中TCP/IP编程接口Winsock,版本为1.1。高版本的Winsock实际与1.1版相差不多,主要是进行了一...
  • sandy1983
  • sandy1983
  • 2009年08月14日 16:48
  • 402

winsock原理

       明确一点: windows创建套接字的目的是为了网络传输,实现数据的传输。        sockets套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,可以将套接字看...
  • lijie45655
  • lijie45655
  • 2011年04月09日 21:32
  • 1281

windows编程--网络编程学习--winsock编程(2)

Winsock下TCP实现过程
  • mao19931004
  • mao19931004
  • 2015年07月22日 14:51
  • 3448

WinSock API编程通用的操作步骤

学习Socket编程,看到 (1) Winsock的打开(使用WSAStartup()来实现) 因为WinSock的服务是以动态链接库形式来实现的,因此必须首先对 WinSock  DLL进行初...
  • u010450926
  • u010450926
  • 2014年05月24日 01:32
  • 1564

[转]Winsock程序设计初步之 Winsock编程原理

 Winsock程序设计初步之 Winsock编程原理   本课程主要讲Windows中TCP/IP编程接口Winsock,版本为1.1。高版本的Winsock实际与1.1版相差不多,主要是进行了一些...
  • newrain021011
  • newrain021011
  • 2007年03月25日 22:59
  • 641

winsock编程,socket建立步骤

一,TCP  socket的建立 服务端: 1-WSAStartup() 初始化winsock 2-socket(),新建SOCKET 3-bind(),绑定一个端口 4-l...
  • u012835905
  • u012835905
  • 2015年03月27日 16:30
  • 641

winsock例子

一、简单的TCP服务器介绍WinSock API是一套供Microsoft Windows操作系统使用的套接字程序库,它最初基于Berkeley套接字,但是其中加入了一些Microsoft的特殊改动。...
  • changsure
  • changsure
  • 2006年12月07日 02:12
  • 5505

winSock网络编程-UDP协议的简单示例(P)

1.关于udp:udp相对于tcp而言,它是不可靠的协议,不是有话说,“任何存在的东西总有其优点所在”吗?udp虽然可靠性不够高,但传输效率却很高,速度也很快,所以用的也很多。2.通信前的注意工作:因...
  • roger_77
  • roger_77
  • 2007年04月09日 12:48
  • 11656

同步与异步 阻塞与非阻塞 WinSock编程

首先,先推荐两个人写的博客,里面有他们对于《同步与异步 阻塞与非阻塞》的理解,最近被这两个概念搞的头疼,一直也没有什么头绪。 http://blog.csdn.net/historyasamirro...
  • wuxuzhao
  • wuxuzhao
  • 2012年05月01日 14:29
  • 2149

WinSock原理

一、客户机/服务器模式  在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步...
  • guogangj
  • guogangj
  • 2006年04月07日 14:34
  • 3426
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Winsock程序设计初步之<一> Winsock编程原理
举报原因:
原因补充:

(最多只允许输入30个字)