听了林海生老师的计算机网络五层协议后开始实现套接字的代码即原理认识,首先为大家上一组图
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
开始用一个简单的套接字电话通信小案例为大家讲解它的具体应用
# 客户端代码 import socket # 1、买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 流式协议=》TCP协议 # 2、拨通服务端电话 phone.connect(('127.0.0.1',8080))# 连通服务端的ip地址和端口 # 3、通信 phone.send('hello word'.encode('utf-8')) data=phone.recv(1024)# 最大接受的数据量为1024个Bytes,收到的是bytes类型 print(data.decode('utf-8')) # 4、关闭连接(必选的回收资源的 *** 作) phone.close()
# 服务段代码 import socket # 1、买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 流式协议=》TCP协议 # socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 数据报协议=》UDP协议 # 2、绑定手机卡 phone.bind(('127.0.0.1',8080))# phone.bind((服务端的ip地址,端口(0-65535,1024以前的都被系统保留使用))) # 127.0.0.1->本地回环地址(一般用于测试):只有自己这台机器才能访问,即便局域网也不能访问 # 3、开机 phone.listen(5)# 5指的是半连接池的大小 print('服务端启动完成,监听地址为:%s:%s'%('127.0.0.1',8080)) # 4、等待电话连接请求,拿到电话连接conn conn,client_addr=phone.accept()# 接受一个连接请求 print(conn)# tcp三次握手的双向通路 print("客户端的ip和端口",client_addr) # 5、通信:收发消息 data=conn.recv(1024)# 最大接受的数据量为1024个Bytes,收到的是bytes类型 print("客户端发来的消息:",data.decode('utf-8')) conn.send(data.upper())# 发消息 # 6、关闭电话连接conn(挂电话)(必选的回收资源的 *** 作) conn.close() # 7、(可选)关机 phone.close()
注意事项:
''' 先运行服务端再运行客户端,否则会报错:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 要先启动服务端,再启动客户端才能连接成功。 当第一次启动服务段端时会停在:-》conn,client_addr=phone.accept()—》等待电话连接请求,拿到电话连接conn 等启动服务端后连接请求送到半连接池,服务端取到电话连接请求运行后面的代码 '''
1、启动服务端时,服务端的结果:
服务端启动完成,监听地址为:127.0.0.1:8080
2、启动客户端时,客户端的结果:
HELLO WORD
3、启动客户端时,服务端的结果:
服务端启动完成,监听地址为:127.0.0.1:8080客户端的ip和端口 ('127.0.0.1', 57495) 客户端发来的消息: hello word # 注意服务端的ip和端口:'127.0.0.1', 8080 # 注意客户端的ip和端口:'127.0.0.1', 57495 # ip地址之所以相同是因为在同一个电脑上,但端口不同加以区分
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)