zoukankan      html  css  js  c++  java
  • 基于TCP/IP的程序设计

    TCP特点

    (1)面向连接的传输

    (2)端到端的通信

    (3)高可靠性,确保传输数据的正确性,不会出现丢失或者乱序

    (4)全双工方式传输

    (5)采用字节流方式,以字节为单位传输字节序列

    (6)紧急数据传送功能

    通信模式

    同步与异步模式

    套接字模式

    阻塞模式:

    默认情况下套接字都是阻塞模式(阻塞函数accept()/connect()/send()/recv(),直到操作完成才会返回控制权)

    产生阻塞模式的四种情况:

    • 阻塞式读-接收缓冲区已经没有数据可读(读函数的工作是将接收缓冲区的数据复制到进程的缓冲区中)
    • 发送缓冲区空间小于要写的数据量-写函数将不进行任何复制操作(写函数将数据从用户缓冲区复制到发送缓冲区)
    • 阻塞式接收连接,调用accept()时完成队列为空
    • connect()连接时,进程至少要阻塞一个往返时间(RTT)

    解决阻塞效率问题的方法:

    • 超时控制方法-使用套接字选项设置函数或者使用定时器
    • 套接字多路复用方法-select()->select(IList read,IList write,IList error,int microseconds)

    非阻塞模式:

    有两种方法可以避免使用阻塞模式:非阻塞套接字和异步套接字

    • 非阻塞套接字(将套接字设置成非阻塞模式即可)
    • 异步套接字(指采用异步回调AsyncCallback委托)

    同步套接字编程技术:

    1.遇到线程交叉调用控制问题,调用线程之前增加:Control.CheckForIllegalCrossThreadCalls=false;

    2.收发数据的方式

    • Socket的Receive方法或者是NetworkStream类的Read方法
    • Socket的Send方法或者是NetworkStream类的Write方法-首先将发送的数据转换成字节数组,然后直接发送到TCP缓冲区(默认大小1024B),send返回整数代表发送到缓冲区的字节数,write无返回值,能够自动保证用户数据全部发送到TCP缓冲区。

    缓冲区->要发送的数据->字节流转换->发送

    异步套接字编程技术:

    异步套接字可以在监听的同时进行其他操作,具体是先使用begin方法,然后再AsyncCallback委托提供的方法中调用end方法结束操作。

    基于TcpClient类与TcpListener类的编程

    这连个类构建于Socket之上,提供了更加抽象级别的TCP服务,便于快速编写网络程序

  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/janghe/p/8028201.html
Copyright © 2011-2022 走看看