网络编程之socket
- 网络编程之socket
- socket:在网络编程中的一个基本组件,也称套接字。
- 一个套接字就是socket模块中的socket类的一个实例。
- 套接字包括两个:
- 服务器套接字和客户机套接字
- 套接字的实例化需要3个参数:
- 1.地址簇:socket.AF_INET
- 2. 流:socket.SOCK_STREAM
- 3.使用的协议: 默认为0
- 服务器套接字:以下简称socket_server
- 客户端套接字:以下简称socket_client
- 地址:address=('127.0.0.1',8000)
- socket_server使用bind方法绑定address,再调用listen方法去监听,控制排队等候连接的最大数
- socket_client使用connect方法连接到服务器,使用的地址与服务器bind的地址相同
- 套接字有两个方法:
- send(1024) #发送数据,每次最多发送1024bytes
- recv(1024) #接收数据,每次最多接收1024bytes
sk = socket.socket()
sk的方法:
sk.bind(address)
s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。- sk.listen(backlog)
监听传入连接,backlog指定在拒绝连接之前,可以挂起等待的连接数
backlog需要在内核中维护连接队列,所以该值不能过大
sk.accept()
接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。
接收TCP 客户的连接(阻塞式)等待连接的到来
sk.connect(address)
连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
sk.connect_ex(address)
同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061- sk.close()
关闭套接字
- **python库相关参考文档地址:http:python.org/doc/lib/module_socket.html
- *****简单的套接字交互*****
- server端:
- import socket
- # #family type
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.bind(address)
- sk.listen(3)
- print('waiting......')
- while 1:
- conn, addr = sk.accept()
- print(addr)
- while 1:
- try:
- data = conn.recv(1024)
- except Exception:
- break
- if not data: break
- print('.........', str(data, 'utf8'))
- inp=input('>>>')
- conn.send(bytes(inp,'utf8'))
- sk.close()
- client端:
- import socket
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.connect(address)
- while True:
- inp=input('>>>')
- if inp == 'exit':
- break
- sk.send(bytes(inp,'utf8'))
- data=sk.recv(1024)
- print(str(data,'utf8'))
- sk.close()
- *****在client端输入shell命令,在服务器端执行命令后,返回结果*****
- server端:
- import subprocess
- import socket
- # #family type
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.bind(address)
- sk.listen(3)
- print('waiting......')
- while 1:
- conn, addr = sk.accept()
- print(addr)
- while 1:
- try:
- data = conn.recv(1024)
- except Exception:
- break
- if not data: break
- print('.........', str(data, 'utf8'))
- obj=subprocess.Popen(data.decode('utf8'),shell=True,stdout=subprocess.PIPE)
- cmd_result=obj.stdout.read()
- result_len=bytes(str(len(cmd_result)),'utf8')
- print('>>>>>>',result_len)
- conn.sendall(result_len)#粘包现象 1600
- conn.recv(1024)#解决粘包
- conn.sendall(cmd_result)
- sk.close()
- client端:
- import subprocess
- import socket
- # #family type
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.bind(address)
- sk.listen(3)
- print('waiting......')
- while 1:
- conn, addr = sk.accept()
- print(addr)
- while 1:
- try:
- data = conn.recv(1024)
- except Exception:
- break
- if not data: break
- print('.........', str(data, 'utf8'))
- obj=subprocess.Popen(data.decode('utf8'),shell=True,stdout=subprocess.PIPE)
- cmd_result=obj.stdout.read()
- result_len=bytes(str(len(cmd_result)),'utf8')
- print('>>>>>>',result_len)
- conn.sendall(result_len)#粘包现象 1600
- conn.recv(1024)#解决粘包
- conn.sendall(cmd_result)
- sk.close()
- *****ftp*****
- server端:
- import subprocess
- import socket
- # #family type
- import os
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.bind(address)
- sk.listen(3)
- print('waiting......')
- BASE_DIR=os.path.dirname(os.path.abspath(__file__))
- while 1:
- conn, addr = sk.accept()
- while 1:
- data=conn.recv(1024)
- cmd,filename,filesize=str(data,'utf8').split('|')
- path=os.path.join(BASE_DIR,'yuan',filename)
- filesize=int(filesize)
- f=open(path,'ab')
- has_receive=0
- while has_receive!=filesize:
- data=conn.recv(1024)
- f.write(data)
- has_receive+=len(data)
- f.close()
- client端:
- import socket
- import os
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.connect(address)
- BASE_DIR=os.path.dirname(os.path.abspath(__file__))
- while True:
- inp=input('>>>').strip()# post|11.png
- cmd,path=inp.split('|')
- path=os.path.join(BASE_DIR,path)
- filename=os.path.basename(path)
- file_size=os.stat(path).st_size
- file_info='post|%s|%s'%(filename,file_size)
- sk.sendall(bytes(file_info,'utf8'))
- f=open(path,'rb')
- has_sent=0
- while has_sent!=file_size:
- data=f.read(1024)
- sk.sendall(data)
- has_sent+=len(data)
- f.close()
- print('上传成功')
网络编程之socket的更多相关文章
- 网络编程之Socket & ServerSocket
网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- [深入浅出Cocoa]iOS网络编程之Socket
http://blog.csdn.net/kesalin/article/details/8798039 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] [深入浅出Co ...
- 网络编程之Socket代码实例
网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...
- [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序]
[网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序] 为何学习socket套接字一定要先学习互联网协议: 1.首先:要想开发一款自己的C/S架构软件,就必须掌握socket ...
- Python自动化运维之15、网络编程之socket、socketserver、select、twisted
一.TCP/IP相关知识 TCP/UDP提供进程地址,两个协议互不干扰的独自的协议 TCP :Transmission Control Protocol 传输控制协议,面向连接的协议,通信 ...
- Python网络编程之socket应用
1 引言 本篇主要对Python下网络编程中用到的socket模块进行初步总结.首先从网络基础理论出发,介绍了TCP协议和UDP协议:然后总结了socket中的常用函数:最后通过实际代码展示基本函数的 ...
- 【python之路35】网络编程之socket相关
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- linux网络编程之socket编程(九)
转眼又快到十一月份了,北京已经是完全进入冬天的节奏,外面冷风嗖嗖的,不过在夜深人静之时,学习永远成了我最快乐的时光,只有此时会觉得自己是如此踏实,虽说白天工作也是编一天程,但是此时的编程,是一种业余爱 ...
随机推荐
- Css-深入学习之单个颜色实现 hover 和 active 时的明暗变化效果
本文是作者从别的网站和文章学习了解的知识,简单做了个笔记,想要学习更多的可以参考这里:[css进阶]伪元素的妙用--单标签之美,奇思妙想 (1.normal)(2.hover)(3.active) / ...
- CCF 201604-2 俄罗斯方块
题目不难,但是感觉很有意思.一开始忘了把调试信息注释掉,WA了两次... 试题编号: 201604-2 试题名称: 俄罗斯方块 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 ...
- jQuery 选择同时包含两个class的元素的实现方法
Jquery选择器 多个 class属性参照以下案例 <element class="a b good list card"> 1. 交集选择: $(".a. ...
- 更新/替换系统 hosts,轻松访问国外站点
更新 hosts 下面介绍的操作均可能覆盖现有 hosts ,进行操作前请先确认是否需要备份. 推荐使用本项目的 Host Tools 来自动化 备份/配置 工作. 若更新 hosts 未立即生效,请 ...
- 【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组
F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standa ...
- K米点歌APP评测
K米APP评测 产品简介 K米点歌是一款免费的社交K歌手机应用,其手机点歌功能主要在KTV.夜总会,酒吧等K歌场所中使用,当前提供iPhone版本及安卓版本下载使用.——百度百科 评测版本 K米点歌4 ...
- 【CityHunter】基于LBS的AR体感游戏设计理念
本人目前还不是游戏行业的圈内人士,并不懂得,游戏行业的生态圈,也不懂得,所谓的什么“中国市场环境”.所以不敢发表关于这方面的见解,不过我在这里想要插一句话,就是我认为啊,行业内,人与人之间还是有分层次 ...
- 11月6日下午PHP分页查询(查询结果也显示为分页)
1.先把数据库里所有的数据分页显示在页面,并在显示数据的表格上方加上查询表单. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- ARCGIS9.3安装说明
1) 安装LMSetup.exe" 其中第一步选择第一项,并使用"37102011.efl9"文件做为lic文件,在使用之前需要将该文件中的主机名改为本机的机器名, ...
- ArcGIS将Nodata区设置为0
两个栅格进行叠加,有时会有一部分没有数据,即用identify点击该区域,Value为NoData,而不是像其他非空区域一样有值.此时注意nodata区域要赋予0值,因为nodata+任何数=noda ...