WinSock程.pptVIP

  • 0
  • 0
  • 约 51页
  • 2017-05-15 发布于贵州
  • 举报
WinSock程

WinSock编程 陶新民 Window网络界面 面向连接的应用程序流程图 TCP连接网络程序说明 为更清楚的说明出Winsock的结构原理,下面以电信局的普通电话服务为比较对象进行说明。 1、电信局提供电话服务类似我们这的Server,普通电话用户类似我们这的Client。 2、首先电信局必须建立一个电话总机。这就如果我们必须在Server端建立一个Socket(套接字),这一步通过调用socket()函数实现。 3、电信局必须给电话总机分配一个号码,以便使用户要拨找该号码得到电话服务,同时接入该电信局的用户必须知道该总机的号码。同样,我们也在Server端也要为这一套接字指定一port(端口),并且要连接该Server的Client必须知道该端口。这一步通过调用bind()函数实现。 TCP连接网络程序说明 4、接下来电信局必须使总机开通并使总机能够高效地监听用户拨号,如果电信局所提供服务的用户数太多,你会发现拨打电信局总机老是忙音,通常电信局内部会使该总机对应的电话号码连到好几个负责交换的处理中心,在一个处理中心忙于处理当前的某个用户时,新到用户可自动转到一下处理中心得到服务。同样我们的Server端也要使自己的套接口设置成监听状态,这是通用listen()函数实现的,listen()的第二个参数是等待队列数,就如同你可以指定电信局的建立几个负责交换的处理中心。 5、用户知道了电信局的总机号后就可以进行拨打请求得到服务。在Winsock的世界里做为Client端是要先用socket()函数建立一个套接字,然后调connect()函数进行连接。当然和电话一样,如果等待队列数满了、与Server的线路不通或是Server没有提供此项服务时,连接就不会成功。 TCP连接网络程序说明 6、电信局的总机接受了这用户拨打的电话后负责接通用户的线路,而总机本身则再回到等待的状态。Server也是一样,调用accept()函数进入监听处理过程,Server端的代码即在中处暂停,一旦Server端接到申请后系统会建立一个新的套接字来对此连接做服务,而原先的套接字则再回到监听等待的状态。 7、当你电话挂完了,你就可以挂上电话,彼此间也就离线了。Client和Server间的套接字的关闭也是如此;这个关闭离线的动作,可由Client端或Server端方先关闭。有些电话查询系统不也是如此吗?关闭套接字的函数为closesocket() 服务器实现步骤 从以上情况可以看出在服务器端建立一个套接字,并进入实际的监听步骤的过程如下:socket()-bind()-listen()-accept() 那么在accept()完了后,我们说在Server端将生成一个新的套接字,然后Server将继续进入accept()状态,我们该如何用这个新的套接字来进行与Client端的通信呢,这就用到了recv()函数,而Client端则是通过send()函数来向服务器发信息的。 基本的网络服务器步骤(阻塞) 设计一个基本的网络服务器有以下几个步骤: 1、初始化Windows Socket 2、创建一个监听的Socket 3、设置服务器地址信息,并将监听端口绑定到这个地址上 4、开始监听 5、接受客户端连接 6、和客户端通信 7、结束服务并清理Windows Socket和相关数据,或者返回第4步 #include winsock2.h #pragma comment(lib, “wsock32.lib”) // project-add ? to ? project-files加入ws2_32.lib void main(void){ WSADATA wsaData; SOCKET ListeningSocket; SOCKET NewConnection; SOCKADDR_IN ServerAddr; SOCKADDR_IN ClientAddr; int Port = 5150; // 初始化Windows Socket 2.2 WSAStartup(MAKEWORD(2,2), wsaData); // 创建一个新的Socket来响应客户端的连接请求 ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 填写服务器地址信息 // 端口为5150 // IP地址为INADDR_ANY,注意使用htonl将IP地址转换为网络格式 Serv

文档评论(0)

1亿VIP精品文档

相关文档