一、TCP协议示意图:


listen():监听客户端的连接,客户端有链接,listen马上就有返回。
accept():连接之后,会返回客户端的信息(ip地址、端口号),如果没有连接则一直堵塞。连接成功后,服务器就可以发数据,同时会创建一个新的socket
recvfrom:接收客户端的数据,如果服务端没有收到客户端发来的数据,会滞留,下面的代码不会执行。
read():读取客户端发过来的数据
write():将数据返回给客户端
由new_socket来完成与客户端数据的传输
如果new_socket关闭,则说明当前的这个客户端请求结束,服务端服务完毕;如果有新的请求来了,服务器会创建新的new_socket与它通讯。
如果关掉第一个socket,则说明整个服务端程序关闭了

二、步骤

(1) socket创建一个套接字
(2) bind绑定ip和port
(3) listen使套接字变为可以被动链接
(4) accept等待客户端的链接
(5) recv/send接收发送数据

三、代码实现TCP协议

服务器端

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关闭意味着整个服务器全部关闭

代码注释:

1、host_port = (’’, 8088)
server_socket.bind(host_port)
创建目标服务器,绑定一个IP和端口 服务器里面空的字符串代表server_socket绑定这台机器下的任何ip地址**
2、new_socket, client_addr = server_socket.accept()
等待客户端的连接请求,当前函数是线程阻塞的函数,accept返回2个值,第一个:新的socket,第二个:客户端地址,
新创建的socket是server_socket中的子socket,只是和当前的客户端(一个客户端)收发数据**
3、data = new_socket.recv(1024) # data是字节数据
服务器接收客户端发送过来的数据,recv一般用于TCP协议的接收数据,recvfrom用于UDP**
4、new_socket.send(‘THANK you’.encode(‘utf-8’))
服务器端发送数据给客户端,在TCP中发送数据用send,UDP用sendto**

客户端:

from socket import *# todo 1、客户端、创建client-socket    TCP协议
client_socket = socket(AF_INET, SOCK_STREAM)# todo  2、客户端发送连接的请求(不是传输数据的请求,是创建连接的请求)# todo  目标服务器的ip和端口号
server_ip_port = ('192.168.1.112', 8088)# todo 发送连接请求,此时服务端产生了新的new_socket
client_socket.connect(server_ip_port)#client_socket.close()# todo 客户端发送请求,用send不用sendto,客户端知道服务器的ip和端口,服务器也知道客户端的端口和ip,因为是面向连接的
send_data = input('请输入:')
client_socket.send(send_data.encode('utf-8'))# todo  接收服务器返回的数据
recv_data = client_socket.recv(1024)print('客户端接收到的服务器的数据为:', recv_data.decode(encoding='utf-8'))# todo 关闭socket
client_socket.close()

代码注释:
send_data = input(‘请输入:’)
client_socket.send(send_data.encode(‘utf-8’))
客户端发送请求,用send不用sendto,客户端知道服务器的ip和端口,服务器也知道客户端的端口和ip,因为是面向连接的

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

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

    一.TCP协议的原理图 每个客户端与服务端通讯是互不干扰的 二.注意点 1.tcp服务器─般情况下都需要绑定,否则客户端找不到这个服务器 2.tcp客户端一般不绑定,因为是主动链接服务器,所以只要确定 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. Python网络编程—TCP套接字之HTTP传输

    HTTP协议 (超文本传输协议) 1.用途 : 网页获取,数据的传输 2.特点: 应用层协议,传输层使用tcp传输 简单,灵活,很多语言都有HTTP专门接口 无状态,协议不记录传输内容 http1.1 ...

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

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

最新文章

  1. 可持续农业生态系统中的核心微生物组
  2. 为什么Android变得对商业世界至关重要?
  3. 腾讯员工干满15年可选择“提前退休”!
  4. 两只塔姆沃斯牛 The Tamworth Two
  5. Android WebView常见问题及解决方案汇总
  6. springboot环境搭建及入门必知
  7. JAVA四种遍历Map的方法
  8. rabbitmq 消息长度_Spring Boot教程(29) – RabbitMQ必备基础
  9. java singleton inner class_Java面向对象设计模式-单例模式
  10. 图片上传插件WebUploader的坑
  11. YOLO系列专题——YOLOv1实践篇
  12. java redis hscan_如何在Redis中使用HSCAN命令?
  13. 流水灯c语言代码switch,单片机C语言入门之六switch case语句流水灯
  14. Windows文件传输小工具,网络传输文件,内网传输
  15. 线性分类器——Fisher线性判别
  16. 2022牛客寒假算法基础集训营5 E.复苏小孩 详解
  17. VC中自定义IE浏览器
  18. php 中margin-top,margin-top是什么意思-css编程词典-php中文网
  19. 201933 plsql设置及使用技巧—Jess
  20. 算法(三)列举所有k-mer的组合

热门文章

  1. 数据中心用蓄电池解决方案
  2. bpmn js 生成json_你不知道的 tsconfig.json
  3. 成功解决No handles with labels found to put in legend.
  4. DL之CNN:利用CNN算法实现对句子分类+进行情感分析(预测句子情感)
  5. DL之ANN/DNN: 人工神经网络ANN/DNN深度神经网络算法的简介、应用、经典案例之详细攻略
  6. 【强烈推荐】最好理解的LSTM与GRU教程
  7. 【转】Linux Netfilter实现机制和扩展技术
  8. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。...
  9. web模拟telnet
  10. PAT——1022. D进制的A+B