一、TCP协议的原理图


每个客户端与服务端通讯是互不干扰的

二、注意点

1、tcp服务器─般情况下都需要绑定,否则客户端找不到这个服务器
2、tcp客户端一般不绑定,因为是主动链接服务器,所以只要确定好服务器的ip、port等信息就好
3、tcp服务器中通过listen可以将socket创建出来的主动套接字变为被动的,这是做tcp服务器时必须要做的
4、当一个tcp客户端连接服务器时,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务
5、listen后的套接字是被动套接字,用来接收新的客户端的链接请求的,而accept返回的新套接字是标记这个新客户端的
6、关闭]listen后的套接字意味着被动套接字关闭了,会导致新的客户端不能够链接服务器,但是之前已经链接成功的客户端正常通信。
7、关闭accept返回的套接字意味着这个客户端已经服务完毕
8、当客户端的套接字调用close后,服务器端会recv解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线
对第8点进行解释:
服务器端

from socket import *# todo 1、创建server-socket      TCP协议
server_socket = socket(AF_INET, SOCK_STREAM)# todo 2、创建目标服务器,绑定一个IP和端口  服务器里面空的字符串代表server_socket绑定这台机器下的任何ip地址
host_port = ('', 8088)
server_socket.bind(host_port)# todo  3、监听服务器的socket,listen让socket处于被动。这时就可以接收客户端的连接请求了
server_socket.listen(5)  # 一般为5,表示客户端线程挂起的个数# todo 4、等待客户端的连接请求,当前函数是线程阻塞的函数,accept返回2个值,第一个:新的socket,第二个:客户端地址
new_socket, client_addr = server_socket.accept()  # todo 新创建的socket是server_socket中的子socket,只是和当前的客户端(一个客户端)收发数据# todo 5、服务器接收客户端发送过来的数据,recv一般用于TCP协议的接收数据,recvfrom用于UDP
data = new_socket.recv(1024)  # data是字节数据print('服务器接收的数据是:', data.decode('utf-8'))# todo 6、服务器端发送数据给客户端,在TCP中发送数据用send,UDP用sendto
new_socket.send('THANK you'.encode('utf-8'))# 关闭套接字
new_socket.close()  # todo  new_socket关闭意味着当前客户端的服务已经完成
server_socket.close()  # todo  server_socket关闭意味着整个服务器全部关闭

客户端

python网络编程—TCP协议(二)相关推荐

  1. python网络编程—TCP协议(一)

    一.TCP协议示意图: listen():监听客户端的连接,客户端有链接,listen马上就有返回. accept():连接之后,会返回客户端的信息(ip地址.端口号),如果没有连接则一直堵塞.连接成 ...

  2. Python网络编程——TCP与UDP

    Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制): UDP提供无连接的传输,通信前不需要建立连接. 2) TCP ...

  3. python tcp协议_python 网络编程 -- Tcp协议

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 ...

  4. 第三十三篇,网络编程TCP协议通讯过程实现和函数接口

    网络编程知识点概览 ========================================    1.核心知识点        传输层的两个重要协议             tcp协议:   ...

  5. 网络编程 | tcp协议 | udp协议 | 三次握手与四次挥手

    目录 网络编程 为什么要用网络编程 软件开发的结构 1. C/S架构 2.B/S架构 网络基础 一个程序如何在网络上找到另一个程序? ip地址 什么是端口 远程数据传输发展史 OSI七层网络模型 前言 ...

  6. Python网络编程-----TCP

    1.TCP TCP通信模型中,在通信开始之前,⼀定要先建⽴相关的连接,才能发送数据,类似于⽣活中,"打电话".TCP编程分为客户端和服务器端两部分组成,所以我们需要首先完成服务器端 ...

  7. Python网络编程——TCPIP协议

    1.网络编程就是通过网络让不同计算机上运行的程序可以进行通信. 2.软件间的通信分为两种 应用类程序(QQ)和web类程序(百度) 3.客户端:就是常用的程序QQ: 服务端:一致运行着个别人的提供服务 ...

  8. [Python 网络编程] TCP、简单socket模拟ssh (一)

    OSI七层模型(Open System Interconnection,开放式系统互联) 应用层网络进程访问应用层:为应用程序进程(例如:电子邮件.文件传输和终端仿真)提供网络服务:提供用户身份验证表 ...

  9. Python网络编程——HTTP协议学习笔记

    HTTP协议学习笔记 HTTP协议概述 一.HTTP协议的介绍 HTTP协议的全称是(HyperText Transfer Protocol),翻译过来就是超文本传输协议. 超文本是超级文本的缩写,是 ...

最新文章

  1. 基于select模型的TCP服务器
  2. 服务器端调用智能合约,《精通以太坊:开发智能合约和去中心化应用》 ——3.4 远程调用以太坊客户端...
  3. 浅谈传统企业网络运营那些事儿
  4. Leetcode--72.编辑距离(java)
  5. SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
  6. c# HttpWebResponse 调用WebApi
  7. android系统面试问答_Android面试问答
  8. 索尼计算机bios正确设置,索尼bios设置图解教程
  9. 大风起兮云飞扬 —记2011年的中国云计算
  10. 坐标转换程序:布尔沙七参数计算、投影正反算、坐标换带等
  11. 计算机硬件——显示器原理
  12. [附源码]JAVA+ssm计算机毕业设计城市公交系统(程序+Lw)
  13. 数据结构之排序 --- 插入排序
  14. IPSec基础-IPSec协议类型
  15. 【在线课程】普通人怎么投资区块链
  16. linux远程文件拷贝方式,linux远程拷贝文件
  17. 进入注册表一些常用的命令大全汇总
  18. 100天单词学习计划
  19. python二维数组随机取行,组成新的数组
  20. 操作系统实验四:文件系统

热门文章

  1. 机器人鸣人是哪一集_火影里的五个机器人,第一个比鸣人还厉害,机器丁次你都没见过...
  2. Python语言学习:python语言代码调试—异常处理之详细攻略
  3. Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略
  4. Py之wxPython:wxPython的简介、安装、使用方法之详细攻略
  5. 成功解决tempfile.pyquot;, from random import Random as _Random ImportError: cannot import name 'Random
  6. Matlab:序列分析法MATLAB代码
  7. 成功解决解决VM软件安装Linux的Ubuntu过程,开启Linux出现Oprating System not found错误
  8. 集成学习-Boosting集成学习算法GBDT
  9. struts2静态方法和动态方法调用
  10. 泛型--协变与逆变(转)