基于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服务,便于快速编写网络程序
基于TCP/IP的程序设计的更多相关文章
- 基于TCP/IP协议的C++网络编程(API函数版)
源代码:http://download.csdn.net/detail/nuptboyzhb/4169959 基于TCP/IP协议的网络编程 定义变量——获得WINSOCK版本——加载WINSOCK库 ...
- JAVA Socket 底层是怎样基于TCP/IP 实现的???
首先必须明确:TCP/IP模型中有四层结构: 应用层(Application Layer).传输层(Transport Layer).网络层(Internet Layer ).链路层( ...
- 20181225 基于TCP/IP和基于UDP/IP的套接字编程
一.TCP/IP的套接字编程 服务器端代码: import socketserver = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.sock ...
- 基于TCP/IP的长连接和短连接
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...
- 读书笔记——网络编程与开发技术(3)基于TCP/IP协议的网络编程相关知识
TCP/IP协议:数据链路层,网络层,传输层,应用层. IP地址分为5类:A类.B类.C类.D类.E类. (A类.B类.C类是基本类,D类多用于多播传送,E类为保留类.) "*"表 ...
- 标准C实现基于TCP/IP协议的文件传输
上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...
- 标准C语言实现基于TCP/IP协议的文件传输
TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如下: 1.Socket系统调用 为了进行网络I/O,服务器和客户机两 ...
- c#基于TCP/IP、CIP协议的欧姆龙PLC通信
一.关于CIP协议 CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连 ...
- 网络通信-在浏览器输入url,基于TCP/IP协议,浏览器渲染的解释
知识点1: 网络模型 TCP/IP四层 和ISO七层模型 (统一省略后面层字.比如传输代表传输层) 知识点2: 在应用层中TCP建立连接,经历的三次握手协议 首先:,TCP协议是什么? 为什么要三次握 ...
随机推荐
- Mac 10.12为打开终端增加快捷键(转)
1.在实用工具中打开Automator.app 2.选择新建,然后选择服务 3.服务收到选择为没有输入 然后在左边侧栏中双击Run AppleScript(有些系统会显示运行 AppleScript) ...
- 五一,期待一场这样的旅行,提前预祝Csdner五一快乐
五一,期待一场这样的旅行,提前预祝Csdner五一快乐 五一,你是否期待一次这样的旅行: 住在一间安静优美的小屋,在鸟鸣中起床,推窗有花香铺面而来.早餐过后,在阳光温暖的抚摸里,骑车踏青或光脚奔跑. ...
- Linux网络编程服务器模型选择之并发服务器(上)
与循环服务器的串行处理不同,并发服务器对服务请求并发处理.循环服务器只能够一个一个的处理客户端的请求,显然效率很低.并发服务器通过建立多个子进程来实现对请求的并发处理.并发服务器的一个难点是如何确定子 ...
- Struts2 Servelet重构
这是利用action模仿请求Servelet(单例) 作用: 1.减少web.xml代码量 2.将servelet中的代码转移到action中,只需要在action中定义业务逻辑则可. 1.定义一个过 ...
- linux安装QQ截图
本人(壮壮熊)现用系统是ubuntu 12.04 相信用过linux系统的朋友都知道,linux下的截图软件是在不咋的.虽然系统本身有带截图工具,但是却苦于没有办法在截下来的图片上作画圈.写文字说明等 ...
- Comet:基于 HTTP 长连接的“服务器推”技术(转载)
“服务器推”技术的应用 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这种方式并不能满足很多现实应用的需求,譬如: 监控系统:后台硬件热插拔.LED.温度.电压发生变化: 即时通信 ...
- 反射 XMLUtil
package com.dys.util; import java.beans.Introspector; import java.beans.PropertyDescriptor; import j ...
- leetcode简单题目两道(5)
Problem Given an integer (signed bits), write a function to check whether it . Example: Given num = ...
- 数据库索引--------B/B+树、聚集、非聚集、符合索引
摘录自博客:http://www.cnblogs.com/morvenhuang/archive/2009/03/30/1425534.html 一.引言 对数据库索引的关注从未淡出我的们的讨论,那么 ...
- Python(3):文件读写与异常
访问路径: 文件读写必然涉及到文件会放在某个路径下.在python里,可以通过引入os包来实现切换当前访问的路径: # 假设我在 /home/zyq/KiDe/Python/test 文件夹中有一个文 ...