zoukankan      html  css  js  c++  java
  • AsyncSocket

    1.AsyncSocket与SyncSocket区别

    Socket 分为 同步,异步,阻塞,非阻塞。
    阻塞	block 当拨打某热电话,但是此人不在,你拿电话等他回来,期间不能再用电话,
    非阻塞 nonblock 当拨打某人带你花,此人不在,你挂断电话,等会儿再打。即轮询/POLL.
    异步		你打电话,此人不在,你叫接电话的人,告诉那人,回来后跟你打电话。
    

    同步异步指通信模式

    阻塞非阻塞指 在接收和发送时,是否等待动作完成才返回。

    在实现过程中,如果服务端是异步的,客户端也是异步的,通信效率会很高。但是如果服务端在请求的返回时,也是返回给请求的链路时,客户端是可以同步的。这种情况下,服务端兼容同步和异步。

    2.IPEndPoint

    要与远程主机进行通信,仅有IP是不够的。在Internet中,TCP/IP 使用一个网路地址和一个服务端口号来唯一标识
    设备和服务。网路地址标识网络上的设备号;端口号表示该设备上的特定服务。网络地址和服务端口的组合称为端点。
    在c#中,使用IPEndPoint来表示这个终点。该类 包含应用程序链接到 主机的服务 所需的IP 和 端口地址。
    构造函数:public IPEndPoint(IPAddress ,int).
    

    3.阻塞和非阻塞

    Windows 套接字 在两种模式下 执行I/O 操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的函数会一直执行下去,不会立即返回程序。而在非阻塞模式下,winsock函数无论如何都会立即返回。
    
    在同步模式中,对执行网路操作的函数 如 send 和 receive 的调用,一直等到操作完成后,才将控制权返回给调用程序。
    在异步模式中,这些调用将立即返回控制权。
    

    4.Semaphore 发出新型号装置。信号量。

    5.Daemon Thread 守护线程

    线程分为两类:
    
    • 用户线程 UserThread

    • 守护线程 Daemon Thread.

      守护线程:程序在运行的时候,在后台提供通用服务的线程,比如垃圾回收线程。当所有的非守护线程结束的时候,程序终止,同时杀死进程中所有的守护线程。反过来说,只要非守护程序还在运行,程序就不会终止。

      守护线程要注意以下几点:

    1. 守护线程在thread.start()之前设置,否则汇报IllegalThreadException异常。不能把正在运行的常规线程设置为守护线程
    2. 在Deamon 线程中产生的线程也是Daemon的
    3. 守护线程应该永远不去访问固有资源,如文件,数据库,因为他会在任何操作的时候发生中断。

    6.AsyncSocketUserToken .

    用于AsyncSocketUserToken绑定,保存每个Socket服务对象,
    包括:m_receiveEventArgs 接收数据异步事件
    	m_asyncReceiveBuffer 接收数据异步事件使用的缓存
    	m_sendEventArgs 发送数据异步事件
    	m_receiveBuffer 接收异步事件返回的数据存放缓存
    	m_sendBuffer 保存发送的数据缓存
    

    4.IOCPSocketServer

    m_asyncSocketUserTokenPool.管理所有空闲的
    

    7.Semaphore 信号量

    Semaphore 负责协调各个线程,以保证它们能够正确的,合理的使用公共资源。也是操作系统中,用于控制进程同步互斥的量。
    
    信号量Semaphore常用的方法:WaitOne(),Relase().
    Release() 作用:退出信号,并返回前一个计数。
    WaitOne() 阻止当前线程,直到当前线程的WaitHandle接收到信号。
    
    Semaphore  sema=new Seamphore(x,y);
    	x:剩余的位置数量
    	y:总的位置数量
    

    8.Socket

    (1)new Socket(IPEndPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp);
    Socket()有三个参数,
    *	domain 协议簇,通常支持IPV4,IPV6,AF_LOCAL,AF_UINX等
    *	type .Socket类型.通常长有STREAM,DARAM,SOCK_RAW等
    *	protocal .协议。通常用TCP,DUP,STCP,TICP等。
    (2)bind()函数
    bind()把地址族中的特定地址赋给socket .了例如AF_INET 就是把ipv4或者Ipv6的地址和端口组合给Socket
    (3)listen()函数
    	如果作为一个服务器,Socket(),Bind()之后,就会调用Listen()来监听这个Socket.如果客户端这时候调用connect()来发出链接请求,服务器端就会接收到这个请求。
    int listen(int sockfd,int backlog);
    int connect(int sockfd,const struct sockaddr);
    (4)accept()函数
    	TCP服务器端 一次调用 socket(),bind(),listen()之后,就会监听指定的Socket地址。
    	TCP客户端 依次调用了socket(),connect()之后,就向TCP服务端发送一个链接请求,
    	TCP服务端监听到这个请求后,就会调用accept()来接收这个请求,这样就建立好了链接。
    	之后可以进行I/O操作。
    (5)recv(),send()
    	至此 服务器与客户端已经建立好链接了,可以调用I/O进行读写。实现网路中不同进程之间的通信。
    	网络I/O操作
    	*	read()/write()
    	*	recv()/send()
    	*	readv()/writev()
    	*	recvmsg()/sendmsg()
    	*	recvfrom()/sendto()
    (6)
  • 相关阅读:
    day3 数据类型
    子查询
    mysql综合练习题
    day5 练习
    月末总结
    Iconfont-阿里巴巴矢量图标库
    vue简介
    Redis简介和数据结构
    浏览器初始化css
    vue脚手架搭建项目初始化
  • 原文地址:https://www.cnblogs.com/sujingnuli/p/9359875.html
Copyright © 2011-2022 走看看