Socket知识

异步Socket工作原理

以接收一条消息说明问题。首先,程序系统投递一个接收数据的请求,并为其指定一个数据缓冲区回调函数,回调函数用来指示当数据到达后将如何处理当有数据到达的时候,系统将数据读入缓冲区,并执行回调函数,处理这条消息。不需要关心这条消息何时到达。

异步比同步的性能低1、客户端Socket。2、服务端连接数比较少。3、连接数很多,但都是短连接。

Socket是什么:
       Socket应用层TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。

服务器端先初始化Socket,然后与端口绑定(bind),进行端口监听(listen),调用accept阻塞,等待客户端连接。此时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,客户端与服务器端建立了连接。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

端口号:1到255 之间的号码被用于远程应用程序所请求的进程和网络服务每个网络通信循环地进出主计算机的TCP 应用层它被两个所连接的号码套接字唯一地识别;组成套接字的两个号码就是机器的IP 地址和TCP 软件所使用的端口号

套接字的三种类型 
  流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字(RAW)。 
  流式套接字(SOCK_STREAM) 
  流式的套接字可以提供可靠的面向连接的通讯流。 
  Telnet 应用程序、BBS服务、以及系统的远程登陆都是通过Telnet 协议连接的。Telnet 就是一个流式连接。WWW 浏览器,使用的HTTP 协议也是通过流式套接字来获取网页的。

数据报套接字(SOCK_DGRAM) 
  数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。 
  数据报套接字使用IP,使用数据报协议UDP(User Datagram Protocol) 
  “无连接(UDP)不像流式套接字那样维护一个打开的连接,你只需要把数据打成一个包,把远程的IP 贴上去,然后把这个包发送出去。不需要建立连接的。 
  UDP 的应用例子有: tftp, bootp 等。 
  每个使用UDP的程序都要有自己的对数据进行确认的协议。 
  TFTP 协议定义了对于每一个发送出去的数据包,远程在接受到之后都要回送一个 “ACK” 。如果在5 秒内没有的得到回应,就会重新发送这个数据包直到数据包接受者回送了 “ACK” 信号。这些知识对编写一个使用UDP 协议的程序员来说是非常必要的。 
  无连接服务器一般都是面向事务处理的,一个请求一个应答就完成了客户程序与服务程序之间的相互作用。 
  套接字工作过程如下: 
  服务器首先启动 
  通过调用socket()建立一个套接字, 
  然后调用bind()将该套接字和本地网络地址联系在一起, 
  再调用listen()使套接字做好侦听的准备,并规定它的请求队列的长度, 
  之后就调用accept()来接收连接。 
  客户建立套接字 
  然后就可调用connect()和服务器建立连接。 
  客户机和服务器之间就可以通过调用read()write()来发送和接收数据。 
  最后,待数据传送结束后,双方调用close()关闭套接字。 
  对流式套接字只是调用send() 函数来发送数据。对于数据报套接字,需要自己加个信息头,然后调用sendto() 函数把数据发送出去

Microsoft.Net Framework为应用程序访问Internet提供了分层的可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。

.Net类可以视为包含3个层次:请求/响应层应用协议层传输层。WebReqeust和WebResponse 代表了请求/响应层,支持Http、TCPUDP的类组成了应用协议层,而Socket处于传输层

在Internet中,TCP/IP 使用一个网络地址和一个服务端口号来唯一标识设备。网络地址和服务端口的组合称为终结点,在.NET 框架中正是由 EndPoint 表示这个终结点,它提供表示网络资源或服务的抽象,用以标志网络地址等信息。.Net为每个受支持的地址族定义了 EndPoint 的子代;对于 IP 地址族,该类为 IPEndPoint。IPEndPoint 类包含应用程序连接到主机上的服务所需的主机和端口信息,通过组合服务的主机IP地址和端口号,IPEndPoint 类形成到服务的连接点。

Socket 类支持两种基本模式:同步异步。其区别在于:在同步模式中,对执行网络操作的函数(如 Send 和 Receive)的调用一直等到操作完成后才将控制返回给调用程序。在异步模式中,这些调用立即返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值