刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程序,据此一些人可能会认为TCP/IP编程很简单。其实不然,TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在通信方式和报文格式的多样性上。

一。通信方式

  主要有以下三大类:

  (一)SERVER/CLIENT方式

  1.一个Client方连接一个Server方,或称点对点(peer to peer)。
  2.多个Client方连接一个Server方,这也是通常的并发服务器方式。
  3.一个Client方连接多个Server方,这种方式很少见,主要用于一个客户向多个服务器发送请求情况。

  (二)连接方式

  1.长连接

  Client方与Server方先建立通讯连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在,可以用下面命令查看连接是否建立:

  netstat –f inet|grep 端口号(如5678)。

  此种方式常用于点对点通讯。

  2.短连接

  Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.

  (三)发送接收方式

  1.异步

报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况:

  (1)异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接收
  (2)异步单工:接收和发送是用两个不同的程序来完成。

  2.同步

  报文发送和接收是同步进行,既报文发送后等待接收返回报文。同步方式一般需要考虑超时问题,即报文发上去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读返回报文,直接通知超时返回。

  实际通信方式是这三类通信方式的组合。比如一般书上提供的TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的组合是基本不用的,比较常用的有价值的组合是以下几种:

同步短连接Server/Client  
        同步长连接Server/Client
        异步短连接Server/Client
        异步长连接双工Server/Client
        异步长连接单工Server/Client

  其中异步长连接双工是最为复杂的一种通信方式,有时候经常会出现在不同银行或不同城市之间的两套系统之间的通信。比如金卡工程。由于这几种通信方式比较固定,所以可以预先编制这几种通信方式的模板程序。

二.报文格式

  通信报文格式多样性更多,相应地就必须设计对应的读写报文的接收和发送报文函数。

  (一)阻塞与非阻塞方式 

  1.非阻塞方式

  读函数不停地进行读动作,如果没有报文接收到,等待一段时间后超时返回,这种情况一般需要指定超时时间。

  2.阻塞方式

  如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。

  (二)循环读写方式

  1.一次直接读写报文

  在一次接收或发送报文动作中一次性不加分别地全部读取或全部发送报文字节。

  2.不指定长度循环读写

  这一般发生在短连接进程中,受网络路由等限制,一次较长的报文可能在网络传输过程中被分解成了好几个包。一次读取可能不能全部读完一次报文,这就需要循环读报文,直到读完为止。

  3.带长度报文头循环读写

  这种情况一般是在长连接进程中,由于在长连接中没有条件能够判断循环读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文.实际情况中,报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须转换成ASCII,常见的报文头码制有:
(1)n个字节的ASCII码
(2)n个字节的BCD码
(3)n个字节的网络整型码

  以上是几种比较典型的读写报文方式,可以与通信方式模板一起预先提供一些典型的API读写函数。当然在实际问题中,可能还必须编写与对方报文格式配套的读写API.

  在实际情况中,往往需要把我们自己的系统与别人的系统进行连接,有了以上模板与API,可以说连接任何方式的通信程序都不存在问题。

TCP/IP通信程序设计方式相关推荐

  1. TCP/ip通信模式

    TCP/IP 应用层与应用程序 *************************************************** 更多精彩,欢迎进入:http://shop115376623.t ...

  2. 《Linux高性能服务器编程》学习总结(四)——TCP/IP通信案例:访问Internet上的Web服务器...

    第四章      TCP/IP通信案例:访问Internet上的Web服务器 HTTP协议是工作在应用层上的协议,其应用十分广泛,而在进行通信的过程中,经常使用HTTP代理服务器.HTTP代理服务器主 ...

  3. Linux内核协议栈分析之——tcp/ip通信并不神秘

    Jack:计算机如何进行通信? 我:我可以告诉你带Linux操作系统的计算机如何进行通信. Jack:带Linux操作系统的计算机?这和不带操作系统的计算机有区别吗? 我:有的. Jack:哦.那你说 ...

  4. MATLAB与DSP(C6657)的TCP/IP通信实现

    最近尝试使用从MATLAB端键入输入,将输入值传给DSP,DSP运算之后将结果传回MATLAB并显示.我所设置的PC的IP地址是192.168.2.101,DSP的IP地址是192.168.2.100 ...

  5. 川崎机器人总线通信_川崎机器人TCP/IP通信方法及编程过程介绍

    川崎机器人的TCP/IP通信除了直接与川崎机器人通信外,有一种方式是通过PLC间接通信,附上我的另一篇文章,讲c#与三菱PLC通信的: 首先假设一个简单的应用情况,有一台带相机的川崎机器人,需要在机器 ...

  6. TCP/IP 通信示例

    TCP/IP 通信示例 Global String ReadData_P_All$, ReadData_P$(10), data$ ' Global Preserve Double x Global ...

  7. EPSON TCP/IP 通信

    EPSON SCARA机器人TCP/IP 通信时,涉及到的相关指令说明. 14.3 TCP/IP命令. OpenNet //打开TCP/IP端口. ChkNet //返回端口状态:等待读取的字节数或错 ...

  8. 51单片机 ENC28J60 TCP/IP通信

    51单片机 ENC28J60 TCP/IP通信 单片机:STC90C516RD+ ENC28J60模块:mini(3.3V供电) 设备:PC.开发板.两个网线.路由器 首先先介绍一下本文的移植针对于单 ...

  9. qt之TCP/IP通信客户端与服务器自动连接互相传输数据

    一.前言 在开发上位机软件,用的最多的通信就是网络通信,串口通信和USB通信,串口通信相对是最容易的,USB通信在前面的文章中也专门写了一个博客介绍USB HID通信方式,见链接:https://bl ...

最新文章

  1. Linux内核网络栈1.2.13-af_inet.c概述
  2. golang Reflect包
  3. vue+iview 设置全局的url以及跨越问题
  4. VMware找不到父磁盘 父虚拟磁盘在子虚拟磁盘创建之后被修改过。父虚拟磁盘的内容 ID 与子虚拟磁盘中对应的父内容 ID 不匹配
  5. 从一个C程序学“逐步求精”的分析方法
  6. [python]pythonic的字典常用操作
  7. 旅美华人票友演绎易卜生话剧《玩偶之家》
  8. mysql 1449 : The user specified as a definer ('usertest'@'%') does not exist 解决方法 (grant 授予权限)...
  9. ant-Design------select的option 随页面滚动的问题
  10. 识别中文_中文场景文字识别大赛官方baseline
  11. 大道至简——第二章读后感
  12. office插件开发_OneKeyTools:强大PPT插件
  13. 计算机组装有哪些,详解电脑组装配置有哪些
  14. 同比和环比计算公式?
  15. 【C语言】abs()用法及其他绝对值函数
  16. No provider available from registry 192.168.126.129:2181 for service com.jt.service.DubboUserServic
  17. Arduino Uno 使用 人体红外传感器(HC_SR051)实现 人体感应灯
  18. continue在c语言中什么作用,continue在c语言中什么意思?
  19. / ./ ../的区别
  20. 微信小程序真机调试方法出现问题

热门文章

  1. Java中proc是什么意思,在java里头读取/proc/net/dev
  2. 如何零基础入门FPGA?这篇文章让你吃透!
  3. 如何掌握“所有”的程序语言?没错,就是所有!
  4. mcs-51单片机视频教程——从硬件到c语言手把手的教,手把手从零教你学51单片机...
  5. alfresco mysql搭建_Alfresco Community 4.0.d 安装图解
  6. java后台处理ajax请求_java后台怎么对ajax请求的内容进行xss转义?
  7. 中怎么均化走线_PCB板上多长的走线才是传输线?答案是……
  8. java设置断点,在Java中设置断点
  9. 网络安全07-Wireshark下载安装基本使用(抓个简单的包)
  10. linux vi删除操作,vi删除操作