python基础知识学习笔记(网络编程)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python基础知识学习笔记(网络编程),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2952字,纯文字阅读大概需要5分钟。
内容图文
![python基础知识学习笔记(网络编程)](/upload/InfoBanner/zyjiaocheng/823/2736b7ae0f18405ebe5f04881208b66e.jpg)
网络编程一般使用socket套接字
使用TCP建立长连接:
案例 1:
client:(客户端代码)
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
while True:
msg = sk.recv(1024)
print(msg.decode('utf-8'))
if msg == b'q':break
inp = input('>>>')
if inp == 'q':
sk.send(inp.encode('utf-8'))
break
sk.send(inp.encode('utf-8'))
sk.close()
server : (服务端代码)
import socket
sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sk.bind(('192.168.21.36',9000))
sk.listen()
while True:
conn,addr = sk.accept() # 接收连接 三次握手conn
while True:
inp = input('>>>')
if inp == 'q':
conn.send(inp.encode('utf-8'))
break
conn.send(inp.encode('utf-8'))
msg = conn.recv(1024)
if msg == b'q':break
print(msg.decode('utf-8'))
conn.close() # 四次挥手
sk.close()
UDP是不建立两者之间的链接,而是有消息是直接进行发送:
client:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
addr = ('127.0.0.1',9090)
while True:
msg = input('>>>')
sk.sendto(msg.encode('utf-8'),addr)
msg_recv,addr = sk.recvfrom(1024)
print(msg_recv.decode('utf-8'))
sk.close()
server:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',9090))
while True:
msg,addr = sk.recvfrom(1024)
print('来自[%s:%s]的消息--%s'%(addr[0],addr[1],msg.decode('utf-8')))
inp = input('>>>')
sk.sendto(inp.encode('utf-8'),addr)
sk.close()
在python中也可以实行server端发来的shell命令
# server 下发命令
# client 执行命令
# ssh协议
# import os
# ret = os.popen('ls').read()
# print(ret)
import subprocess
# 内置模块 和os模块的功能有相似之处
# 能执行操作系统的命令的功能
ret = subprocess.Popen('dir', # 要执行的命令
shell=True, # 表示要执行的是一条系统命令
stdout=subprocess.PIPE, # 存储执行结果的正常信息
stderr=subprocess.PIPE) # 存储执行结果的错误信息
print('stdout : ',ret.stdout.read().decode('gbk'))
print('stderr : ',ret.stderr.read().decode('gbk'))
案例2:
client:
import socket
import subprocess
sk = socket.socket()
sk.connect(('127.0.0.1',8090))
while True:
cmd = sk.recv(1024).decode('utf-8')
if cmd == 'q': break
res = subprocess.Popen(cmd,shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
sk.send(res.stdout.read())
sk.send(res.stderr.read())
sk.close()
server:
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8090))
sk.listen()
conn,addr = sk.accept()
while True:
cmd = input('cmd : ')
if cmd == 'q':
conn.send(cmd.encode('utf-8'))
break
conn.send(cmd.encode('utf-8'))
print('stdout : ',conn.recv(1024).decode('gbk'))
conn.close()
sk.close()
遇到的问题:执行dir命令没有问题,但是执行ipconfig是遇到了 UnicodeDecodeError: 'gbk' codec can't decode byte 0xcf in position 1023: incomplete multibyte sequen 解决方式是把conn.recv(1024).decode('gbk')中的1024改的大一点
内容总结
以上是互联网集市为您收集整理的python基础知识学习笔记(网络编程)全部内容,希望文章能够帮你解决python基础知识学习笔记(网络编程)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。