基于TCP/UDP的socket编程
基于TCP(面向连接)的socket编程
服务器端顺序:
1. 创建套接字(socket)
2. 将套接字绑定到一个本地地址和端口上(bind)
3. 将套接字设为监听模式,准备接收客户请求(listen)
4. 等待客户请求的到来;当请求带来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)
5. 用返回的套接字和客户端进行通信(send/recv)
6. 返回,等待另一个客户请求
7. 关闭套接字(closesocket)
客户端程序:
1. 创建套接字(socket)
2. 向服务器发送连接请求(connect)
3. 和服务器端进行通信(send/recv)
4. 关闭套接字(closesocket)
TCP建立连接的三次握手发生在socket的那几个函数中呢?请看下图:
从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。
总结:客户端的connect在三次握手的第二个次返回,而服务器端的accept在三次握手的第三次返回。
基于UDP(面向无连接)的socket编程
服务器端(接收端)程序:
1. 创建套接字(socket)
2. 将套接字绑定到一个本地地址和端口上(bind)
3. 等待接收数据(recvfrom)
4. 关闭套接字(closesocket)
客户端(发送端)程序
1. 创建套接字(socket)
2. 向服务器发送数据(sendto)
3. 关闭套接字(closesocket)
如何用UDP协议实现TCP协议?
一点思路:使用UDP协议在数据包里添加TCP的头部使其能够实现TCP的基本功能,包括重传,滑动窗口,慢开始和拥塞控制,滑动窗口的大小可以通过命令行指定。即应用层再封装一个TCP报头,然后解析的时候在协议栈里面把偏移多偏几个字节。
参考资料:
[1] Linux Socket编程(不限Linux).
http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
[2] 如何基于udp实现tcp协议栈?
http://bbs.csdn.net/topics/280046868
转载于:https://www.cnblogs.com/mrsandstorm/p/5701683.html
基于TCP/UDP的socket编程相关推荐
- 基于TCP(面向连接)的Socket编程
基于TCP(面向连接)的Socket编程 一.客户端: 1.打开一个套接字(Socket); 2.发起连接请求(connect); 3.如果连接成功,则进行数据交换(read.write.send.r ...
- tcp java实例_实现了基于TCP的Java Socket编程实例代码
实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...
- java socket 通信协议_java 基于TCP协议的Socket编程和通信
java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...
- 基于TCP/UDP的socket服务器搭建流程
目录 TCP/UDP概念介绍 一.TCP/UDP对比 二.端口号的作用 三.字节序 1.概念 2.分类 3.C程序在内存空间的映射 socket服务器与客户端开发流程 一.流程介绍 二.socket服 ...
- delphi socket 流的使用_基于TCP协议的Socket编程和通信_单向通信
1.TCP:单向通信Socket之服务器端 import java.io.BufferedWriter; import java.io.IOException; import java.io.Outp ...
- TCP与UDP在socket编程中的区别
TCP与UDP在socket编程中的区别 一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可 ...
- python 网络编程 套接字的初使用 基于TCP协议的socket
文章目录 基于TCP协议的socket server端 client端 尝试启动 基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 server端 # ...
- tcp与udp的socket编程,udp代码实现客户端服务端,tcp代码实现客户端服务端(单线程、多线程、多进程分别实现),三次握手
socket编程 网络字节序 定义 为什么网络数据需要转换为网络字节序? Udp协议 Tcp协议 Udp的socket编程 编程流程 接口 创建套接字 绑定地址信息 发送 接收 关闭 主机字节序转换成 ...
- 基于 UDP 的 Socket 编程
基于 UDP 的 Socket 编程 UDP的定义 •UDP 是用户数据报协议,提供的是无连接.不可靠信息传送服务.Java 主要提供了两个类来实现基于 UDP 的 Socket 编程. UDP编程的 ...
最新文章
- MyBatis多数据源配置(读写分离)
- 客户连接多个服务端_Dubbo源码解析之客户端Consumer
- mysql-表完成性约束
- 【gRPC】 在.Net core中使用gRPC
- mysql 基础操作一
- 快速入门RabbitMq,看这一篇就够了。
- pytorch DistributedDataParallel提示未参与loss计算的变量错误
- Android_组件_BroadcastReceiver基础
- [Angular 2] ngFor
- redis/memcache监控管理工具——treeNMS
- java font好看的字体_二十款漂亮的CSS字体样式
- ios12怎么滑屏解锁_iOS12.2 越狱来袭,又是一波秀
- 某网站cookie加密黑盒调用与算法还原
- 强烈推荐 :最用心的运营数据指标解读
- linux alarm函数使用
- 探针台的配件也要第三方计量校准吗
- 基于线性回归预测环境空气质量 代码+数据
- 教你用html+js制作一个自己的点名系统,实例代码分享
- 测试用例----纸杯测试-测试开发面试
- 临期经济诞生了好特卖,临期食品正在“入侵”消费时代
热门文章
- android 应用搬家 分区,把安装在SD卡的应用存在DATA分区的数据移到SD卡上
- php7.0康乐安装_Windows服务器安装配置PHP7.0环境图文教程
- java连接mysql数据库增删改查操作记录
- NoSQL Manager for MongoDB 破解
- bat命令运行java程序
- Excel VBA获取当文件下级子目录或目录中文件
- centos6.5 升级python2.6到python2.7
- DirectAdmin安装mod_encoding支持中文
- Android传感器编程入门(三)
- 一组经典测试思想观点