基于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编程相关推荐

  1. 基于TCP(面向连接)的Socket编程

    基于TCP(面向连接)的Socket编程 一.客户端: 1.打开一个套接字(Socket); 2.发起连接请求(connect); 3.如果连接成功,则进行数据交换(read.write.send.r ...

  2. tcp java实例_实现了基于TCP的Java Socket编程实例代码

    实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...

  3. java socket 通信协议_java 基于TCP协议的Socket编程和通信

    java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...

  4. 基于TCP/UDP的socket服务器搭建流程

    目录 TCP/UDP概念介绍 一.TCP/UDP对比 二.端口号的作用 三.字节序 1.概念 2.分类 3.C程序在内存空间的映射 socket服务器与客户端开发流程 一.流程介绍 二.socket服 ...

  5. delphi socket 流的使用_基于TCP协议的Socket编程和通信_单向通信

    1.TCP:单向通信Socket之服务器端 import java.io.BufferedWriter; import java.io.IOException; import java.io.Outp ...

  6. TCP与UDP在socket编程中的区别

    TCP与UDP在socket编程中的区别 一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可 ...

  7. python 网络编程 套接字的初使用 基于TCP协议的socket

    文章目录 基于TCP协议的socket server端 client端 尝试启动 基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 server端 # ...

  8. tcp与udp的socket编程,udp代码实现客户端服务端,tcp代码实现客户端服务端(单线程、多线程、多进程分别实现),三次握手

    socket编程 网络字节序 定义 为什么网络数据需要转换为网络字节序? Udp协议 Tcp协议 Udp的socket编程 编程流程 接口 创建套接字 绑定地址信息 发送 接收 关闭 主机字节序转换成 ...

  9. 基于 UDP 的 Socket 编程

    基于 UDP 的 Socket 编程 UDP的定义 •UDP 是用户数据报协议,提供的是无连接.不可靠信息传送服务.Java 主要提供了两个类来实现基于 UDP 的 Socket 编程. UDP编程的 ...

最新文章

  1. MyBatis多数据源配置(读写分离)
  2. 客户连接多个服务端_Dubbo源码解析之客户端Consumer
  3. mysql-表完成性约束
  4. 【gRPC】 在.Net core中使用gRPC
  5. mysql 基础操作一
  6. 快速入门RabbitMq,看这一篇就够了。
  7. pytorch DistributedDataParallel提示未参与loss计算的变量错误
  8. Android_组件_BroadcastReceiver基础
  9. [Angular 2] ngFor
  10. redis/memcache监控管理工具——treeNMS
  11. java font好看的字体_二十款漂亮的CSS字体样式
  12. ios12怎么滑屏解锁_iOS12.2 越狱来袭,又是一波秀
  13. 某网站cookie加密黑盒调用与算法还原
  14. 强烈推荐 :最用心的运营数据指标解读
  15. linux alarm函数使用
  16. 探针台的配件也要第三方计量校准吗
  17. 基于线性回归预测环境空气质量 代码+数据
  18. 教你用html+js制作一个自己的点名系统,实例代码分享
  19. 测试用例----纸杯测试-测试开发面试
  20. 临期经济诞生了好特卖,临期食品正在“入侵”消费时代

热门文章

  1. android 应用搬家 分区,把安装在SD卡的应用存在DATA分区的数据移到SD卡上
  2. php7.0康乐安装_Windows服务器安装配置PHP7.0环境图文教程
  3. java连接mysql数据库增删改查操作记录
  4. NoSQL Manager for MongoDB 破解
  5. bat命令运行java程序
  6. Excel VBA获取当文件下级子目录或目录中文件
  7. centos6.5 升级python2.6到python2.7
  8. DirectAdmin安装mod_encoding支持中文
  9. Android传感器编程入门(三)
  10. 一组经典测试思想观点