一、Socket简单介绍

如果要在应用层调用传输层的服务,进行相关程序的设计,就要涉及到套接字编程。套接字也称之为Socket,本质上它就是利用传输层提供的一系列Api来进行网络应用程序的设计。
网络应用程序如果要进行套接字编程,需要明确的创建、使用及释放套接字。
套接字编程是典型的C/S模式。
从下图中可以形象的看到套接字的作用:

(1)套接字是一个主机本地应用程序所创建的,为操作系统所控制的接口。
(2)应用程序通过这个接口,使用传输层提供的服务,跨网络发送/接收消息到/从其它应用进程。

二、用TCP进行套接字编程

套接字编程有面向连接和无连接两种实际上就是TCP套接字编程和UDP套接字编程。
可以使用源端口号来区别客户。
使用TCP进行套接字编程时客户必须初始联系服务器,这时服务器进程必须先运行,创建套接字来迎候客户的初始联系。
那么客户如何初始联系服务器呢?主要有3个步骤:
(1)创建客户本地TCP套接字。
(2)指定服务器进程的IP地址和端口号。
(3)一旦客户创建套接字,客户TCP就发起3次握手并建立与服务器TCP连接。
一旦客户初始联系服务器,服务器TCP为服务器进程创建1个新的套接字与客户通信。这里允许服务器与多个客户通信,而端口号被用来区分客户。
从应用程序的角度来看,TCP为客户和服务器提供了可靠的、顺序的、字节流的传输。

TCP客户/服务器套接字交互流程

流程图如下:

(1)服务器创建一个在端口x上的套接字,然后等待连入请求
(2)在服务器等待连入请求的过程中客户机如果要连接服务器它会创建一个到服务器的IP地址然后和服务器的端口号x相连接的套接字。
(3)使用这个套接字和服务器进行TCP连接建立
(4)连接建立好以后客户机使用套接字向服务器端发送相关请求。
(5)服务器端读到请求以后使用写应答的方式把数据发送给客户机。
(6)客户机读取应答,当所有的读写操作都进行完成以后,客户机关闭套接字。
(7)服务器也关闭套接字
注意:服务器这时关闭的是客户机刚才建立的TCP连接上所对应的套接字,但是监听套接字还在,因为监听套接字要等待下一次的到来。

三、用UDP进行套接字编程

与TCP不同:
(1)当用UDP进行套接字编程时没有初始握手手段;
(2)发送方明确将接收方的IP地址和端口号加入到每个分组。
(3)服务器必须从接收到的分组中析取发送方进程的IP地址、端口号。
这种方式在发送数据时可能被乱序收到或丢失。
从应用程序的角度来看UDP在客户和服务器之间提供一组字节的不可靠传输。

UDP客户/服务器套接字交互流程

流程图如下:

(1)服务器对入栈请求创建套接字,端口是x。
(2)客户机如果要给服务器端发送数据,它也创建一个套接字,这个套接字使用服务器的ip地址和服务器的端口,直接使用这个套接字发送数据包请求。
(3)服务器从服务器套接字中读请求。
(4)服务器收到请求后将应答写到服务器套接字上面,在写应答上面有客户机主机地址和端口号。
(5)客户机从套接字上面读取应答。
(5)这个过程一直进行,客户机如果收发完毕就退出,而服务器又回到前一步继续等待下一个客户机套接字请求的到来。

TCP和UDP套接字编程相关推荐

  1. 网络编程---TCP/UDP套接字编程原理

    本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...

  2. 计网实验原理-TCP/UDP套接字编程

    计算机网络自顶向下结构--第7版 第二章实验,套接字编程 代码运行环境:window10,python 3.8.对于书上代码略作修改. 进程与计算机网络之间的接口 多数应用程序是由通信进程队组成的,每 ...

  3. LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则 .

    const int udp_recvbufsize = 384 * 1024 ; int result = ::setsockopt(m_hSocket, SOL_SOCKET, SO_RCVBUF, ...

  4. day26-2 基于TCP协议的套接字编程

    目录 基于TCP协议的套接字编程 套接字 套接字工作流程 基于TCP协议的套接字编程(简单) 服务端 客户端 基于TCP协议的套接字编程(循环) 服务端 客户端1 客户端2 基于TCP协议的套接字编程 ...

  5. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

  6. 《网络编程》基本 UDP 套接字编程

    在前面文章中介绍了<UDP 协议>和<套接字数据传输>.UDP 协议和 TCP 协议不同,它是一种面向无连接.不可靠的传输层协议.在基于 UDP 套接字编程中,数据传输可用函数 ...

  7. Linux IPv6 UDP套接字编程示例

    udp ipv6套接字编程和ipv4接口类似,参数略有不同,流程都包括创建套接字.绑定地址.发送等. 下面是一个udp ipv6 demo, 包括创建ipv6套接字.绑定地址和发送数据等. 首先先在l ...

  8. linux udp套接字编程获取报文源地址和源端口(二)

    之前项目中涉及udp套接字编程,其中一个要求是获取客户端发过来报文的端口和ip地址,功能很简单,只是对这一块不很熟.之前使用的方法是通过调用recvmsg这个接口,并通过参数msg里面的msg_nam ...

  9. UDP套接字编程——Python语言描述

    首先,回顾一下.在我们使用Socket编程之前的一些网络的概念. IP:它是用来标识处于Internet之中的端系统的. MAC:它是用于在同一局域网中标识不同的计算机的. 端口号:它是用来标识同一台 ...

最新文章

  1. 如何在TVM上集成Codegen(上)
  2. c语言表达逻辑量的方法,c语言中用什么表示逻辑量为真
  3. 计算机组成原理 第三章【存储系统】课后作业解析【MOOC答案】
  4. 安卓java音乐播放器下一曲_Android实现简单音乐播放器(MediaPlayer)
  5. python excel详解_Python - excel 详解
  6. 【更新】Infragistics Ultimate UI for Windows Forms v18
  7. 准确检测图像的轮廓 opencv_OpenCV图像处理-轮廓和轮廓特征
  8. 查找工资前三高的员工
  9. 后代选择+++margin-right:auto
  10. 谷歌放弃go_盘点国内可以使用的十种谷歌服务
  11. java 读CSV 和 Excel
  12. mysql 语句优化的几种方式(总结)
  13. 软件设计师教程 第5版 下载
  14. CAD中如何使用Lisp程序编写坐标标注功能
  15. html5广告条滚动特效代码,js实现随屏幕滚动的带缓冲效果的右下角广告代码
  16. 2019-11-6-Roslyn-how-to-use-WriteLinesToFile-to-write-the-semicolons-to-file
  17. 台式电脑开机显示蓝屏 检查计算机上的病毒,电脑出现蓝屏问题的诊断以及处理的方法...
  18. 古筝四秀 宋婷婷、付娜、常静、吴莉
  19. 《Java并发编程的艺术》作者方腾飞:感谢Java,带我一路前行!
  20. [高通SDM450][Android9.0]禁止电话、短信呼入

热门文章

  1. 微信小程序登录-利用Oenid实现白名单和黑名单
  2. ​Efficient GlobalPointer:少点参数,多点效果
  3. 深度运用LSTM神经网络并与经典时序模型对比
  4. ICLR 2021 | 使用CVAE学习干扰集,增强OOD以及对抗防御的能力
  5. Russell大师课+大厂专家倾授+5小时黑客松,上海临港人工智能开发者大会倒计时5天...
  6. AI产业化应用落地,飞桨三大服务平台帮你开启加速模式
  7. 飞桨抠图直播2020.4.1
  8. googlehelper手机版ios_二次元漫画控iOS苹果手机版下载v1.0.0下载|免费二次元漫画控iOS苹果手机版下载绿色版...
  9. qnetworkreply 获取状态_《DNF》魔界人二觉宠物怎么获取 魔界人二觉宠物获取方法分享...
  10. asp多表查询并显示_零公式实现多表数据查找!3步设置,简单高效!3分钟学会,真香...