Python socket模块方法实现详解
这篇文章主要介绍了Pythonsocket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
socketssh(不带防止粘包的方法)
#!/usr/bin/envpython #-*-coding:utf-8-*- #AuthorIanYing #mail:kongqing.ying@yitu-inc.com importsocket importos server=socket.socket() server.bind(('localhost',6969))#绑定被监听端口 server.listen(5)#监听端口 whileTrue: print("我要开始等电话了") conn,addr=server.accept()#就是等待的意思 #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例 print("电话来了%s"%[conn,addr]) whileTrue: data=conn.recv(1024) ifnotdata: print('clientislost.') break #res=os.popen(data).read()#popen就是打开命令执行,read就是获取结果 #withopen('filename','r')asret:#这两行就可以用过来传输文件了。 #data=ret.read() print('receive:',data) conn.send(data.upper()) server.close()
socketclient模块
#!/usr/bin/envpython #-*-coding:utf-8-*- #AuthorIanYing #mail:kongqing.ying@yitu-inc.com importsocket client=socket.socket()#声明socket类型,同时生成socket链接对象 client.connect(('localhost',6969))#localhost就是本机地址 whileTrue: msg=input('inputmsg>>:').strip() iflen(msg)==0:continue#检查msg的信息,防止无输入信息 #client.send(b"Hello,world!")#发送信息 client.send(msg.encode('utf-8')) data=client.recv(1024)#默认接受1024字节,就是1k #withopen('filename','w')asret:#这两行就可以用过来传输文件了。 #ret=data.write() print(data.decode()) client.close()#关闭端口
防止粘包的socket_ssh.py
#!/usr/bin/envpython #-*-coding:utf-8-*- #AuthorIanYing #mail:kongqing.ying@yitu-inc.com importsocket importos server=socket.socket() server.bind(('localhost',6969))#绑定被监听端口 server.listen(5)#监听端口 whileTrue: print("我要开始等电话了") conn,addr=server.accept()#就是等待的意思 #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例 whileTrue: data=conn.recv(1024).decode() print("电话来了%s"%type(data)) #iftype(data)isstr: #data=data.strip() ifnotdata: print('clientislost.') break cmd_res=os.popen(data).read()#popen就是打开命令执行,read就是获取结果 cmd_res_size=str(len(cmd_res.encode("utf-8"))) print("beforesend",len(cmd_res),"sizeafterencode",cmd_res_size) iflen(cmd_res)==0: print("thereisnooutput.") res_warning="thereisnooutput." conn.send(res_warning.encode("utf-8")) continue else: conn.send(cmd_res_size.encode("utf8")) print(conn.recv(1024).decode())#通过接收数据的形式来强制发送缓冲区的数据,防止粘包。 #withopen('filename','r')asret:#这两行就可以用过来传输文件了。 #data=ret.read() #print('receive:',data) print('receive:',data) conn.send(cmd_res.encode("utf-8")) #conn.send(bytes(cmd_res))#不可行。传输的时候是需要encoding server.close()
socket_client.py
#!/usr/bin/envpython #-*-coding:utf-8-*- #AuthorIanYing #mail:kongqing.ying@yitu-inc.com importsocket client=socket.socket()#声明socket类型,同时生成socket链接对象 client.connect(('localhost',6969))#localhost就是本机地址 whileTrue: msg=input('inputmsg>>:').strip() iflen(msg)==0:continue#检查msg的信息,防止无输入信息 #client.send(b"Hello,world!")#发送信息 client.send(msg.encode('utf-8')) received_size=client.recv(1024).decode()#用来记录接受的数据大小 print("接收的数据大小",received_size) received_cont=b'' received_cont_size=0#用来判断接受数据的大小 ifreceived_size!="thereisnooutput.": client.send("准备好了,可以发送。".encode())#发送确认信息,以防止粘包 received_size=int(received_size)#数据需要变成int才能进行判断 whilereceived_size!=received_cont_size:#判断encode后的长度是否一致。 received_cont_for_test=client.recv(1024) received_cont_size+=int(len(received_cont_for_test)) received_cont=received_cont+received_cont_for_test print("当前结束后的数据大小为:",received_cont_size) #print(received_cont_size) else: print("数据接收完成,接收的数据大小为:",received_cont_size) print("接收的内容为:\n",received_cont.decode(),"\n") else: print("output:\n",received_size) #data=client.recv(1024)#默认接受1024字节,就是1k #withopen('filename','w')asret:#这两行就可以用过来传输文件了。 #ret=data.write() #print(data.decode()) #print(str(data)) client.close()#关闭端口
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。