200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Day09: socket网络编程-OSI七层协议 tcp/udp套接字 tcp粘包问题 socketserver

Day09: socket网络编程-OSI七层协议 tcp/udp套接字 tcp粘包问题 socketserver

时间:2020-06-17 01:09:27

相关推荐

Day09: socket网络编程-OSI七层协议 tcp/udp套接字 tcp粘包问题 socketserver

今日内容:socket网络编程

1.OSI七层协议

2.基于tcp协议的套接字通信

3.模拟ssh远程执行命令

4.tcp的粘包问题及解决方案

5.基于udp协议的套接字通信

6.socketserver

目标:开发一个C/S架构的软件

C/S:客户端----》server

B/S:浏览器----》server

server端:

1.位置必须固定/绑定一个固定的地址

2.对外一直提供服务,稳定运行

3.支持并发(让多个客户端感觉时被同时服务)

网络:

物理连接介质+互联网协议

ip+port可以标识全世界范围内独一无二的应用软件(基于网络通信协议)

任何的数据报应该分为报头+数据部分。其中报头是用来描述数据的,报头的长度是固定的

1 #client 2 import socket 3 #1.买手机 4 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM 5 #2.拨号 6 phone.connect(('127.0.0.1',8080)) #ip和端口应该是服务的IP和端口 7 #3.发收消息 8 while True: 9msg=input('Please input send msg:').strip()10phone.send(msg.encode('utf-8')) #必须是bytes类型11 12data=phone.recv(1024)13print('服务端消息',data)

1 #Server 2 import socket 3 #1.买手机 4 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM 5 #2.插SIM卡 6 phone.bind(('127.0.0.1',8080)) #ip 应该是服务端该软件运行机器的IP地址,port(最好1024-65535) 7 #3.开机 8 phone.listen(5) #半连接池限制的是同一时刻的请求数 9 print('服务端启动。。。')10 #4.等待电话连接的请求11 conn,client_addr=phone.accept() #(套接字对象,存放客户端IP和端口的元组)12 print('====>')13 print(conn,client_addr)14 #5.收发消息15 while True:16data=conn.recv(1024) #1024单位是bytes, 代表最大接收1024 bytes17print('收到消息',data)18conn.send(data.upper())19 #6.挂电话20 conn.close()21 #conn.send()22 #7关机23 phone.close()

输出:

服务端启动。。。

1 #异常是程序发生错误的信号,一旦程序出错2 try:3l=[1,2,3]4#if 100< len(l):5l[100]6print('aa')7 except IndexError:8print('索引超出范围')9 print('other code')

输出:

索引超出范围

other code

1 #client优化 2 import socket 3 #1.买手机 4 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM 5 #2.拨号 6 phone.connect(('127.0.0.1',8080)) #ip和端口应该是服务的IP和端口 7 #3.发收消息 8 while True: 9msg=input('Please input send msg:').strip()10phone.send(msg.encode('utf-8')) #必须是bytes类型11 12data=phone.recv(1024)13print('服务端消息',data)

1 #server 优化 2 import socket 3 #1.买手机 4 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM 5 #2.插SIM卡 6 phone.bind(('127.0.0.1',8080)) #ip 应该是服务端该软件运行机器的IP地址,port(最好1024-65535) 7 #3.开机 8 phone.listen(5) #半连接池限制的是同一时刻的请求数 9 print('服务端启动。。。')10 #4.等待电话连接的请求11 conn,client_addr=phone.accept() #(套接字对象,存放客户端IP和端口的元组)12 print('====>')13 print(conn,client_addr)14 #5.收发消息15 while True:16try:17 data=conn.recv(1024) #1024单位是bytes, 代表最大接收1024 bytes18 if len(data) == 0:break # for linux/MAC19 print('收到消息',data)20 conn.send(data.upper())21except ConnectionResetError: # for windows22 break23 #6.挂电话24 conn.close()25 #conn.send()26 #7关机27 phone.close()

1 import os2 res=os.system('dir')3 print('结果',res)

输出:

结果 0

1 import subprocess2 import time3 obj=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)4 #print (obj)5 stdout=obj.stdout.read()6 7 print(stdout.decode('gbk'))8 stdout=obj.stdout.read()9 time.sleep(0.1)

输出:

驱动器 C 中的卷是 OS

卷的序列号是 E0C1-2532

C:\Users\andy 的目录

/08/26 17:40 <DIR> .

/08/26 17:40 <DIR> ..

/03/20 22:28 <DIR> .anaconda

/07/29 20:27 <DIR> .android

/05/25 22:20 <DIR> .astropy

/03/21 00:17 <DIR> .conda

/05/05 21:53 43 .condarc

/08/26 09:37 <DIR> .ipynb_checkpoints

/03/20 22:27 <DIR> .ipython

/05/06 17:59 <DIR> .jupyter

/05/25 22:15 <DIR> .PyCharm.2

/08/16 23:10 <DIR> 3D Objects

/08/05 14:44 43 a.txt

/03/20 22:15 <DIR> Anaconda2

/05/06 16:12 <DIR> Anaconda3

/05/05 21:53 <DIR> AnacondaProjects

/08/05 15:21 63 b.json

/08/05 15:21 63 c.json

/08/16 23:10 <DIR> Contacts

/07/29 22:32 23,933 Day06.ipynb

1 import struct2 #可以将整形打包成固定长度的bytes类型,可以基于网络传输3 res=struct.pack('i',21215)4 print(res,len(res))5 6 res1=struct.unpack('i',res)7 print(res1[0])

输出:

b'\xdfR\x00\x00' 4

21215

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。