python 基于TCP协议的套接字编程详解
基于TCP协议的套接字编程
实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件
#服务端
importsocket
#1.符合TCP协议的手机
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#TCP
#2.绑定手机号一个服务器,我们自己的电脑作为服务器的话,用自己的IP地址
server.bind(('127.0.0.1',8000))#127.0.0.1代表本地
#server.bind(('192.168.11.251',8000))
server.listen(5)#半连接池可以同时接收5个客户端
#3.等待客户端连接
print('start...')
#链接循环
whileTrue:
#通信循环
conn,client_addr=server.accept()
whileTrue:
try:
#4.收到信息receive
data=conn.recv(1024)#每次接收多少字节,如果改为10,客户端输入dir,(可以在cmd中输入dir,看看会得到什么),会出现什么情况呢,下次的博客会讲到粘包问题,以及如何处理粘包问题
print(data)
#5.回消息
conn.send(data.upper())
exceptConnectionAbortedError:
continue
exceptConnectionResetError:
break
#客户端1
importsocket
#1.创建符合TCP协议的手机
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.拨号
client.connect(('127.0.0.1',8000))
whileTrue:
msg=input('pleaseenteryourmsg')#dir
#3.发送消息
client.send(msg.encode('utf8'))
#4.接收消息
data=client.recv(1024)
print(data)
#客户端2
importsocket
#1.创建符合TCP协议的手机
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.拨号
client.connect(('127.0.0.1',8000))
#msg=input('pleaseenteryourmsg>>>')
#3.发送消息
client.send('hello'.encode('utf8'))
client.send('world'.encode('utf8'))
#4.接收信息
data=client.recv(1024)
print(data)
模拟ssh远程执行命令(linux系统)
#ssh服务端
importsocket
importsubprocess
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('192.168.11.251',8000))#这是我的机子,客户端可以是其他人的机子
server.listen(5)
print('start...')
whileTrue:
conn,cient_addr=server.accept()
print(client_addr)#打印出的是其他人机子的IP
whileTrue:
try:
cmd=conn.recv(1024)#dir
print(cmd)
#帮你执行cmd命令,然后把执行结果保存到管道里
pipeline=subprocess.Popen(cmd.decode('utf8'),
shell=True,
stderr=subprocess.PIPE,#std标准
stdout=subprocess.PIPE)
stderr=pipeline.stderr.read()
stdout=pipeline.stdout.read()
conn.send(stderr)
conn.send(stdout)
exceptConnectionResetError:
break
#ssh客户端
importsocket
#1.创建符合TCP协议的手机
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.拨号
client.connect(('192.168.11.210',8000))
whileTrue:
msg=input('pleaseenteryourmsg')#dir
#3.发送消息
client.send(msg.encode('utf8'))
#4.接收消息
data=client.recv(10)
print(data.decode('gbk'))#在mac电脑上可能是'utf8'
学习最有效的方法一定是有输入,一定要输出,这样学的东西才能真正得有用
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。