python - socket模块1
import socket
ip_port=('127.0.0.1',)
#买手机
s = socket.socket()
#买手机卡
s.bind(ip_port)
#开机
s.listen()
#等待电话
conn,addr = s.accept()
#conn 相当于一条通信线路
#收消息
recv_data = conn.recv()
#发消息
send_data = recv_data.upper()
conn.send(send_data)
#挂电话
conn.close()
import socket
ip_port = ('127.0.0.1',)
#买手机
s = socket.socket()
#拨号
s.connect(ip_port)
#发送消息
send_data = input(">>>:").strip()
s.send(bytes(send_data,encoding='utf-8'))
#收消息
recv_data = s.recv()
print(str(recv_data,encoding='utf-8'))
#挂电话
s.close()
#循环输入,exit退出,可以输入空字符
import socket
ip_port=('127.0.0.1',)
#买手机
s = socket.socket()
#买手机卡
s.bind(ip_port)
#开机
s.listen()
#等待电话
conn,addr = s.accept()
#conn 相当于一条通信线路
#收消息
while True:
recv_data = conn.recv()
if len(recv_data) == :break
#发消息
send_data = recv_data.upper()
conn.send(send_data) #挂电话
conn.close()
#循环输入,exit退出,可以输入空字符
import socket
ip_port = ('127.0.0.1',)
#买手机
s = socket.socket()
#拨号
s.connect(ip_port)
#发送消息
while True:
send_data = input(">>>:").strip()
if send_data == 'exit': break # 输入exit 退出程序
if len(send_data) == : continue #如果输入是空字符,退出本次循环,继续下次循环
s.send(bytes(send_data,encoding='utf-8')) #收消息
recv_data = s.recv()
print("----------------",type(recv_data))
print(str(recv_data,encoding='utf-8'))
#挂电话
s.close()
三、
#一个客户端断开连接后,服务端还可以接受新的连接
import socket
ip_port=('127.0.0.1',)
#买手机
s = socket.socket()
#买手机卡
s.bind(ip_port)
#开机
s.listen()
#等待电话
while True:
conn,addr = s.accept()
#conn 相当于一条通信线路
#收消息
while True:
try: #客户端强制断开(不是输入exit) 会出现异常。
recv_data = conn.recv()
if len(recv_data) == :break
#发消息
send_data = recv_data.upper()
conn.send(send_data)
except Exception:
break
#挂电话
conn.close()
#一个客户端断开连接后,服务端还可以接受新的连接
import socket
ip_port = ('127.0.0.1',)
#买手机
s = socket.socket()
#拨号 s.connect(ip_port)
#发送消息
while True:
send_data = input(">>>:").strip()
if send_data == 'exit': break # 输入exit 退出程序
if len(send_data) == : continue #如果输入是空字符,退出本次循环,继续下次循环
s.send(bytes(send_data,encoding='utf-8')) #收消息
recv_data = s.recv()
print("----------------",type(recv_data))
print(str(recv_data,encoding='utf-8'))
#挂电话
s.close()

#解决粘包问题
send_data = bytes(send_data,encoding='utf-8') #编码成utf-8,字节,并把str转换为字节
ready_tag = 'Ready|%s' %len(send_data)
conn.send(bytes(ready_tag,encoding='utf-8'))
feedback = conn.recv() #收到客户端发送过来的Start
feedback = str(feedback,encoding='utf-8') #把收到的feedback 转换为str
if feedback.startswith('Start'):
conn.send(send_data)
#解决粘包的问题
ready_tag = s.recv() # Ready|9999
ready_tag = str(ready_tag,encoding='utf-8')
if ready_tag.startswith('Ready'): # Ready|9999
msg_size = int(ready_tag.split('|')[-])
start_tag = 'Start'
s.send(bytes(start_tag,encoding='utf-8')) #给server发送Start,告诉server可以准备发送数据了
recv_size = 0 #初始化数据大小
recv_msg =b'' while recv_size < msg_size:
recv_data = s.recv()
recv_msg += recv_data
recv_size += len(recv_data)
print('MSG SIZE %s RECE SIZE %s' % (msg_size, recv_size)) print(str(recv_msg,encoding='utf-8'))
四、socket简单ssh
#一个客户端断开连接后,服务端还可以接受新的连接
import socket
import subprocess
ip_port=('127.0.0.1',)
#买手机
s = socket.socket()
#买手机卡
s.bind(ip_port)
#开机
s.listen()
#等待电话
while True:
conn,addr = s.accept()
#conn 相当于一条通信线路
#收消息
while True:
try: #客户端强制断开(不是输入exit) 会出现异常。
recv_data = conn.recv()
if len(recv_data) == :break
#发消息
p=subprocess.Popen(str(recv_data,encoding='utf-8'),shell=True,stdout=subprocess.PIPE)
res = p.stdout.read()
if len(res) == : #处理输入的错误命令
send_data = 'cmd err'
else:
send_data = str(res,encoding='gbk') #windows平台下解码成gbk,并且gbk转换为str
#解决粘包问题
send_data = bytes(send_data,encoding='utf-8') #编码成utf-8,字节,并把str转换为字节
ready_tag = 'Ready|%s' %len(send_data)
conn.send(bytes(ready_tag,encoding='utf-8'))
feedback = conn.recv() #收到客户端发送过来的Start
feedback = str(feedback,encoding='utf-8') #把收到的feedback 转换为str
if feedback.startswith('Start'):
conn.send(send_data)
except Exception:
break
#挂电话
conn.close()
#一个客户端断开连接后,服务端还可以接受新的连接
import socket
ip_port = ('127.0.0.1',)
#买手机
s = socket.socket()
#拨号 s.connect(ip_port)
#发送消息
while True:
send_data = input(">>>:").strip()
if send_data == 'exit': break # 输入exit 退出程序
if len(send_data) == : continue #如果输入是空字符,退出本次循环,继续下次循环
s.send(bytes(send_data,encoding='utf-8')) #收消息
#解决粘包的问题
ready_tag = s.recv() # Ready|9999
ready_tag = str(ready_tag,encoding='utf-8')
if ready_tag.startswith('Ready'): # Ready|9999
msg_size = int(ready_tag.split('|')[-])
start_tag = 'Start'
s.send(bytes(start_tag,encoding='utf-8')) #给server发送Start,告诉server可以准备发送数据了
recv_size = 0 #初始化数据大小
recv_msg =b'' while recv_size < msg_size:
recv_data = s.recv()
recv_msg += recv_data
recv_size += len(recv_data)
print('MSG SIZE %s RECE SIZE %s' % (msg_size, recv_size)) print(str(recv_msg,encoding='utf-8'))
#挂电话
s.close()
python - socket模块1的更多相关文章
- python——socket模块与列表映射
从socket模块学习中的一段奇怪代码说起 前言:在学习python标准库中的Socket模块中,发现了一段奇怪的代码. import socket def get_constants(prefix) ...
- python --- socket模块详解
socket常用功能函数: socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) ...
- 用python socket模块实现简单的文件下载
server端: # ftp server端 import socket, os, time server = socket.socket() server.bind(("localhost ...
- 项目: 基于Python socket模块实现的简单 ftp 项目:
需要 自己创建一个 info 文件 用来存储用户信息 服务器: import socket import pickle import struct import os import time ''.s ...
- Python socket 基础(Server) - Foundations of Python Socket
Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分 ...
- Python中的socket 模块
Python 提供了两个基本的 socket 模块.第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务 ...
- Python网络编程(2)——socket模块(2)
目录: 1. 异常 2. 地址族 3. 套接字类型 4. 模块方法 5. Socket对象与实例方法 socket模块提供了Python中的低层网络连接接口,用于操作套接字操作. 异常 socket模 ...
- 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...
- python实战第一天-socket模块练习
操作系统 Ubuntu 15.10 IDE & editor JetBrains PyCharm 5.0.2 ipython3 Python版本 python-3.4.3 导入socket模块 ...
随机推荐
- css中的clear的正真意义
网上包括w3cschool 的说法都是 不允许浮动.消除浮动 这样的说法,却看了还是不知道什么意思,一些地方说不通. 所以找到w3c css 的英文文档,如下是节选: 'clear'Values ha ...
- angularjs中ng-switch的用法
<!DOCTYPE html> <html lang="zh-CN" ng-app="app" ng-controller="ctr ...
- HIVE快速入门
(一)简单入门 1.创建一个表 create table if not exists ljh_emp( name string, salary float, gender string) commen ...
- checkbox的问题整理
之前做过一些checkbox的小功能,由于水平有限总是在这一部分花费一些时间,趁现在时间充裕些,整理出来. checkbox是否被选中的判断 第一种: $(this).is(":checke ...
- 最近用的几个sql语句
都在sqlserver数据库下操作,注意sqlserver与mysql和oracle的语法区别 用惯了mysql 和oracle,突然改用sqlserver,有诸多的不习惯,诸多的坑爹,好多的坑,一一 ...
- linux下如何编译python生成libpython2.5.so动态库
http://biancheng.dnbcw.info/python/245306.html
- HADOOP再进阶:本地Yum软件源安装Cloudera Manager 5
参考URL: http://blog.csdn.net/yangzhaohui168/article/details/30118175 http://blog.csdn.net/yangzhaohui ...
- SSH登陆错误 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
今天遇到问题,删除文件即搞定!! ~~~~~~~~~~~~~~ SSH登陆错误 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! Connectio ...
- C#中使用命名管道进行进程通信的实例
原文:C#中使用命名管道进行进程通信的实例 1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为"Windows 应用 ...
- hdu 4512 吉哥系列故事——完美队形I_LCIS
题目链接 题意: 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要 求,则就是新 ...