套接字socket及cs通信的基本概念

套接字socket及cs通信的基本概念

ID:9016277

大小:48.25 KB

页数:4页

时间:2018-04-15

套接字socket及cs通信的基本概念_第1页
套接字socket及cs通信的基本概念_第2页
套接字socket及cs通信的基本概念_第3页
套接字socket及cs通信的基本概念_第4页
资源描述:

《套接字socket及cs通信的基本概念》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、一.套接字Socket基本概念WinSock(WindowsSockets)是处理网络通信的WindowsAPI。许多函数与在BSD中使用的Berkely套接字函数是相同的。套接字,简单的说就是通信双方的一种约定,用套接字中的相关函数来完成通信过程。应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口

2、。区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”,通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。每一个基于TCP/IP网络通讯的程序(进程)都被赋予了唯一的端口(号),端口是一个信息缓冲区,用于保留Socket中的输入/输出信息,端口号是一个16位无符号整数(unsignedshort),范围是0-65535,以区别主机

3、上的每一个程序(端口号就像房屋中的房间号),低于1024的端口号保留给标准应用程序,比如pop3的端口号就是110。每一个套接字都组合进了IP地址、端口、端口号,这样形成的整体就可以区别每一个套接字。Socket可以看成在两个程序进行通讯连接中的一个端点(endpoint),一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。一般一个server服务器对应很多客户端client连接,服务器必须维护一张客户连接列表,每增加一个客户端连接服务器端都要新建一个套接字负责与

4、新增客户端进行对话通信。传输套接字主要有两类:流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。流类型的套接字是为需要可靠连接的应用程序设计的。这些程序通常使用连续的数据流。用于这种类型套接字的协议是TCP,适合FTP这类实现。流套接字是最常用的,一些众所周知的协议如HTTP、TCP、SMTP、POP3等都是基于面向流的协议。数据报套接字使用UDP做为下层协议,是无连接的,有一个最大缓冲区大小(数据包大小的最大值)。它是为那些需要发送小数据包,并且对可靠性要求不高的应用程序设计的。与流式套接字不同,数据报套接

5、字并不保证数据会到达终端,也不保证它是以正确的顺序到来的。数据报套接字的传输效率相当高,它经常用于音频或视频应用程序。对这些程序来说,速度比可靠性更加重要。二.基于套接字的C/S通信模式以下为基于Socket的C/S通信模式图:关于服务器端监听套接字和accept返回的新的套接字的区别一个连接由(server_ip,server_port)和(client_ip,client_port)唯一确定。你可以调用getsockname()函数获取与某个套接字关联的本地地址,调用getpeername()函数获取与某个套接字关联的目的地址。关

6、于监听套接字和accept()返回的新的套接字的区别,借用以下情景说明。好比你去吃饭,饭馆门迎小姐(监听SOCKET)看到你来后和你打招呼,然后(ACCEPT)找来一个服务员小姐(NEWSOCKET)伺候你,然后守在门口继续欢迎(监听)下一个。当然门迎小姐会记录是哪一位服务员小姐招待了你;如再有新客人来,门迎小姐(同一监听SOCKET)又会安排另一位服务员小姐(NEWSOCKET)伺候。门迎小姐走了,伺候每一位客人的服务员小姐不受影响。从以上情景可知连接建立后,客户端用发出连接的那个SOCKET向服务器发数据,是发给服务器新创建的SO

7、CKET,而不是服务器的监听SOCKET。服务器的监听SOCKET永远只是用来接受连接请求。三.套接字的两种模式套接字有阻塞(锁定)和非阻塞(非锁定)两种模式。非阻塞和阻塞描述的是WinSockAPI调用行为特性。(1)阻塞模式套接字在一个阻塞套接字上调用任何WinSockAPI函数(accept()/recv()/send()),都会耗费或长或短的时间“等待”返回,这会阻塞调用线程。直到有点数据可读或可写时,这种调用才返回。阻塞模式的优点是符合时序,容易入手。缺点也是显而易见的,假设这样一种情景,一个线程中要处理多个客户(套接字A、

8、B),我们在套接字A、B上顺序调用recv企图依次接收数据。若客户A始终不发数据,则recv(A)函数将可能永远无法返回,在这期间我们错失了客户B发送来的数据。大多数WinSock应用都遵循“生产者-消费者”模型,应用程

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。