范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

PythonTCP协议网络编程学习笔记

  TCP协议介绍TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)  TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。  TCP通信需要经过创建连接、数据传送、终止连接三个步骤。  TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话",而UDP类似于生活中的"发短信"。
  TCP三次握手首先Client(客户)端发送连接请求报文(第一次握手)。  Server(服务器)端接受连接后回复ACK报文(第二次握手),并为这次连接分配资源。  Client端接收到ACK报文后也向Server段发生ACK报文(第三次握手),并分配资源,这样TCP连接就建立了。
  详细三次握手过程如下:
  第一次握手:起初两端都处于CLOSED关闭状态,Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN-SENT状态,等待Server确认;
  第二次握手:Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;
  第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server就可以开始传输数据。
  TCP四次挥手
  客户端主动发起请求,服务端被动关闭。
  首先是client向server发起断开连接请求,server响应client等会儿断开,server响应client可以断开了,client告知server已经断开链接。
  详细过程如下:
  第一次挥手:起初client和server处于ESTABLISHED状态——client发出连接释放报文段并处于FIN-WAIT-1状态
  第二次挥手:server发出确认报文段且进入CLOSE-WAIT状态——A收到确认后。
  第三次挥手:client进入FIN-WAIT-2状态,等待server的连接释放报文段。
  第四次挥手:server没有要向client发出的数据,server就发出连接释放报文段且进入LAST-ACK状态——client发出确认报文段且进入TIME-WAIT状态——server收到确认报文段后进入CLOSED状态——client经过等待计时器时间2MSL后,进入CLOSED状态。
  TCP服务端创建流程socket创建一个套接字  bind绑定ip和port  listen使套接字变为可以被动链接  accept等待客户端的链接  recv/send接收发送数据   1server.py文件内容如下:  2  3from socket import socket,SOCK_STREAM,AF_INET #导入模块  4def tcp_server():  5    tcp_server_socket=socket(AF_INET,SOCK_STREAM) #创建TCP服务端套接字对接,UDP是SOCK_DGRAM  6    server_address=("127.0.0.1",8888)#定义本TCP服务端的ip and port  7    tcp_server_socket.bind(server_address) #绑定本机的8888端口  8    tcp_server_socket.listen() #执行监听  9    client_socket,client_info = tcp_server_socket.accept() #接收客户端的socker and info 10    data=client_socket.recv(1024)#接收客户端发过来的消息 11    print("the data is:%s, it"s from %s",(client_info,data.decode("utf-8")))#打印客户端的消息 12    client_socket.close()#关闭客户端的连接 13    tcp_server_socket.close()#关闭服务端的连接 14 15if __name__ == "__main__": 16    print("the TCP server is running ...") 17    tcp_server() 18 19 20 21client.py文件内容如下: 22from socket import socket,SOCK_STREAM,AF_INET #导入模块 23def tcp_client(): 24    tcp_client_socket=socket(AF_INET,SOCK_STREAM) #创建TCP客户端套接字对接 25    server_address=("127.0.0.1",8888)#定义本TCP服务端的ip and port 26    tcp_client_socket.connect(server_address) #连接到服务端 27    message="hello my name is tony" #定义要发送的消息 28    tcp_client_socket.send(message.encode("utf-8"))#向服务端发送消息 29    tcp_client_socket.close()#关闭客户端的连接 30 31 32if __name__ == "__main__": 33    print("the TCP client is running ...") 34    tcp_client() 35    print("the message was send")
  输出内容为:1#server.py文件输出内容如下: 2the TCP server is running ... 3the data is:%s, it"s from %s (("127.0.0.1", 50929), "hello my name is tony") 4 5 6#client.py文件输出内容如下: 7the TCP client is running ... 8the message was send
  改进上面代码使Server和Client可以互相交流沟通,server.py与client.py文件内容是具体的实现代码。 server.py文件内容: 1from socket import socket,SOCK_STREAM,AF_INET #导入模块  2def tcp_server():  3    tcp_server_socket=socket(AF_INET,SOCK_STREAM) #创建TCP服务端套接字对接,UDP是SOCK_DGRAM  4    server_address=("127.0.0.1",8888)#定义本TCP服务端的ip and port  5    tcp_server_socket.bind(server_address) #绑定本机的8888端口  6    tcp_server_socket.listen() #执行监听  7    client_socket,client_info = tcp_server_socket.accept() #接收客户端的socker and info  8    while 1:  9        data=client_socket.recv(1024)#接收客户端发过来的消息 10        print("the client say:",data)#打印客户端发送过来的信息 11        server_answer=input(">>>")#从键盘录入信息 12        client_socket.send(server_answer.encode("utf-8")) 13 14if __name__ == "__main__": 15    print("the TCP server is running ...") 16    tcp_server()
  步骤如下: 导入模块  建立TCP socket连接  绑定ip 和 port  启动监听  等待accept  一直循环接收客户端的请求  打印客户端的消息  输入消息并回复给客户端  client.py文件内容: 1from socket import socket,SOCK_STREAM,AF_INET #导入模块  2def tcp_client():  3    tcp_client_socket=socket(AF_INET,SOCK_STREAM) #创建TCP客户端套接字对接  4    server_address=("127.0.0.1",8888)#定义本TCP服务端的ip and port  5    tcp_client_socket.connect(server_address) #连接到服务端  6    while 1:  7        message=input("client>>>") #定义要发送的消息  8        tcp_client_socket.send(message.encode("utf-8"))#向服务端发送消息  9        response=tcp_client_socket.recv(1024) 10        print("the server say:",response.decode("utf-8")) 11 12if __name__ == "__main__": 13    print("the TCP client is running ...") 14    tcp_client() 15    print("the message was send")
  步骤如下: 导入模块  建立TCP socket连接  连接到服务端监听的ip 和 port  一直循环输入消息并发送给服务端  接收服务端返回的消息  打印服务端返回的消息  Server and Client 对应的输出:1client console output: 2the TCP client is running ... 3client>>>hello tony 4the server say: hello jack 5client>>>how are you 6the server say: i"m fine 7client>>> 8 Server Console 对应的输出:1the TCP server is running ... 2the client say: b"hello tony" 3>>>hello jack 4the client say: b"how are you" 5>>>i"m fine
  增加当服务器重启后客户端不挂掉,客户端能够重试连接服务端的功能。
  代码实现如下:
  server.py文件内容如下  1from socket import socket,SOCK_STREAM,AF_INET #导入模块  2  3def tcp_server():  4    tcp_server_socket=socket(AF_INET,SOCK_STREAM) #创建TCP服务端套接字对接,UDP是SOCK_DGRAM  5    server_address=("127.0.0.1",9999)#定义本TCP服务端的ip and port  6    tcp_server_socket.bind(server_address) #绑定本机的9999端口  7    tcp_server_socket.listen() #执行监听  8    client_socket,client_info = tcp_server_socket.accept() #接收客户端的socker and info  9    while 1: 10        data=client_socket.recv(1024)#接收客户端发过来的消息 11        datas=data.decode("utf-8") 12        if(len(datas)>1): 13            print("the client say:",datas)#打印客户端发送过来的信息 14            if(datas=="bye"): 15                break 16            server_answer=input(">>>")#从键盘录入信息 17            client_socket.send(server_answer.encode("utf-8")) 18 19if __name__ == "__main__": 20    print("the TCP server is running ...") 21    tcp_server()
  client.py文件内容如下  1import time  2  3from socket import socket,SOCK_STREAM,AF_INET #导入模块  4  5  6def connection_socket():  7    tcp_client_socket = socket(AF_INET, SOCK_STREAM)  # 创建TCP客户端套接字对接  8    server_address = ("127.0.0.1", 9999)  # 定义本TCP服务端的ip and port  9    try: 10        tcp_client_socket.connect(server_address)  # 连接到服务端 11    except: 12        print("connection failed!!!") 13        exit(0) 14    return tcp_client_socket 15 16def tcp_client(): 17    while 1: 18        try: 19            tcp_client_socket=connection_socket() 20            message=input("client>>>") #定义要发送的消息 21            print("the message is:",message) 22            print(tcp_client_socket) 23            tcp_client_socket.send(message.encode("utf-8"))#向服务端发送消息 24            response=tcp_client_socket.recv(1024) 25            print("the server say:",response.decode("utf-8")) 26        except: 27            tcp_client_socket.close()#关闭原有socket连接 28            print("the socket connection is failed, try again to reconnection...") 29            time.sleep(3) 30 31if __name__ == "__main__": 32    print("the TCP client is running ...") 33    tcp_client() 34    print("the message was send")
  client console output:  1the TCP client is running ...  2  3client>>>abc  4the message is: abc  5  6the server say: def  7  8client>>>aa  9the message is: aa 10 11the socket connection is failed, try again to reconnection... 12 13client>>>abc 14the message is: abc 15 16the server say: def 17client>>>

配酷睿12标压处理器,LPDDR5内存,ThinkBook16仅4999元最近两年,笔记本市场的产品类型越来越丰富,而其中最大的输家就是15W低电压处理器,很多用户不会考虑这种处理器,而是喜欢35W45W的标压处理器。这不,我们看到联想的新品ThinkBAITO全新中大型SUV内饰曝光华为鸿蒙座舱加持,或定名问界M7IT之家3月19日消息,此前有消息称,华为后续关于造车项目的整体规划包括6款产品,其中有三款轿车以及一款MPV车型,还有两款SUV车型,基本上涵盖了市面主流车型。据称,新款SUV尺magic4价格出笼,我有些话要说荣耀magic4比其他厂商技高一筹的地方1。配置增强,主动降价。2。首发ltpo高频护眼屏幕。3。标准版即配置潜望长焦。可以说2022开年阶段,国内一众手机厂家正在迷路途中,他们不充换电消失,今年两会后新能源去向何方?丨氪金新能源作者宋婉心编辑郑怀舟封面来源视觉中国连续两年在政府工作报告中出现后,今年3月5日发布的报告没有出现充换电站相关字眼,而新能源车则重新回到报告中继续支持新能源车消费。去年新能源车市场阿里市值蒸发30000亿,对马云有影响吗?网友他早已在欧洲旅游提到最赚钱的行业,大部分人都会想到房地产和互联网。而如今,受到国家的宏观调控,房地产的发展已经趋于稳定,如今,最赚钱的行业,大多都在互联网当中。而提到互联网,人们最为熟悉的巨头就是拼多多6万人砍价事件前因后果拼多多是大家平时手机中常见的软件,该平台会不定时的推送一些砍价活动啊,拼团活动啊。虽然也有成功的,但是相比较,绝大部分人应该没成功过而在前几天,拼多多一下子上了各大平台的热搜榜。原红米k40s在k40的基础上做到了三个保留和三个提升,我们来看看这两款手机的对比相信感兴趣的朋友已经了解过了,所以我就在这里简单的为大家总结一下吧,让大家更直观的了解。首先说一下三个保留保留了骁龙870处理器,这款处理器为什么好?因为在888以三星有多拼?12256G机皇再降2600,雷军都没有这样的勇气对于三星这个手机品牌,现在还有多少人喜欢呢?可能因为之前出现过不好的电池影响,导致后来的国人确实不喜欢三星手机了。但其实认真分析就知道,大家之所以不再买三星手机,最重要的还是因为价大疆被美国软件Figma封禁,设计文件无法提取,国产软件出手相救对于美国来说,凡是被针对的中国企业,都遭遇各种无理由的封禁,从华为开始,就一直没有停过,即便是作为全球无人机巨头大疆在近日也被美国设计软件公司封禁,一时间在制造行业引发巨大热议。这宁夏基础教育信息化发展综合指数跃居全国第六中新网银川3月19日电(记者李佩珊)记者19日从宁夏教育厅获悉,据教育部近日公布的2020年中国教育信息化发展报告数据显示,宁夏基础教育信息化发展综合指数排名从2017年的全国第1中国半导体业的挑战与机遇中国在1990年代开始了自己的半导体世界之旅,那时距该行业开始发展已有30年(第一颗芯片于1960年出现)。半导体芯片是当前所有数字技术的基础,它们的创建是一个非常复杂的过程,因为
这可能是闲鱼上最羞耻的特殊服务,太刺激了大家好,我是大叔。大叔最近全身心陷入闲鱼,无法自拔,事情是这样的,大叔最近想出一波闲置,就想把闲置挂咸鱼给卖了。然后一浏览停不下来了,大叔觉得闲鱼真的是一个神奇的地方,只有你想不到从微信头像就能看出自己的性格?没有很刻意,但是很真实之前给大家分享了不少好看的微信头像,但是你知道怎么从微信头像上可以看出一个人的性格吗?微信头像看出一个人的性格,太准啦!微信头像看出一个人的性格,太准啦!微信头像看出一个人的性格,民族品牌的骄傲,比亚迪再次开启国产高光时刻近几年新能源汽车有越发的走进我们的生活,大家对于新能源汽车的喜爱程度也在逐步的提升,而在众多的新能源汽车品牌中以比亚迪是尤为的被大众所认可,要知道作为新能源汽车领域的领路人,比亚迪小米有品众筹硬核工具,OLED屏远射30米,抗衡博世的开始最近新房交收了,都说重软装轻硬装,所以想在软装上花功夫。因为父亲就是装修师傅,从小耳濡目染,知道卷尺的重要性,考虑到装修和添置家具都得测量尺寸,所以打算入手一款激光测距仪。为什么不小米有品众筹上架磨脸机,魔都精英还能这样玩,涨姿势了最近不管是在抖音快手,还是微博小米社区虎扑等社交平台,都能看到一种叫做英国治dou法的祛豆秘方,说是用水杨酸等酸类洗面奶洗脸,能消除脸上的豆豆等脏东西,不管是北上广的爱美人士,还是OC渲染器最全中文材质库来了,学习C4D必备C4D相信大家都不陌生了!就像是摄影界的视频领域,是设计界代表视觉表达形式!现在几乎所有电商电影海报等等都会用到他!C4D被业界誉为新一代的三维动画制作软件,功能异常强大,工作却极混动轩逸要来了,PK卡罗拉双擎,售价13万你买单吗?油价一天比一天高,除了纯电动车,混合动力车型也越来越受到大家的欢迎。显而易见,为了迎合大家的喜好,各大车企都在加速推出混合动力车型。在现有市场车型中,卡罗拉双擎本田凌派锐混动比亚迪新款哈弗H6S申报信息曝光,性价比将更高!等等党福利来了哈弗H6S作为H6的同门兄弟,一直备受用户关注,现在也处于火热的预售环节。近日,工信部发布了第349批道路机动车辆生产企业及产品公告新产品公示,小编就发现了新款哈弗H6S的身影。那起亚K3GT曝光,2。0L1。6T前后独立悬挂,最具性价比ampampquot小钢炮ampampquot?最近几年,韩系车以极具个性的整车设计,和较快的更新速度,吸引国内消费者的目光。起亚K3作为该品牌轿车销量的顶梁柱,以十万出头的起售价吸引着不少的年轻消费者。那么,要是在起亚K3上,高性价比的15W无线充图拉斯Magsafe小冰磁无线充高功率的Magsafe无线磁吸快充配件,让iphone12系列区别于以往的iphone设备。我已经为我的iphone12配备三个配件了,可以说每一个都价格不菲。比如iphone12强势来袭!首款搭载AMD处理器的掌上游戏本究竟怎样?关于GPD这个掌机品牌,想必大家已经不算陌生了。前段时间,此品牌又推出了首款搭载AMD处理器的掌上游戏本GPDWINMax2021。该款掌机在设计上主打小巧便携与游戏性能的平衡,一