Python服务器开发三:Socket
Python服务器开发三:Socket
socket是操作系统中I/O的延续,它可以使进程和机器之间的通信成为可能。socket可以看成一个标准的文件描述符。不同的是文件需要用open()函数打开,而socket用socket()
函数建立.recv()、send()函数和read()、write()函数极为相似。
TCP一般通过accept()来为每个连接的客户端建立一个新的scoket。UDP一般只是使用一个单一的socket,完全依靠recvfrom()返回的值来判断该往哪里发送响应。
客户端:
1、建立一个socket:
//SOCK_STREAM表示TCP,SOCK_DGRAM表示UDP,AF_INET表示IPv4
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2、连接socket
连接socket需要一个tuple参数,来提供IP和端口号:
s.connect((“www.example.com”, 80))
3、
#!/usr/bin/env pythonimport socketprint "Creating socket...", s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "done."print "Looking up port number...", port = socket.getservbyname('http', 'tcp') print "done."print "Connecting to remote host on port %d..." % port, s.connect(("www.google.com", port)) print "done."#获取本身的IP和端口号 print "Connected from", s.getsockname() #获取远程的IP和端口号 print "Connected to", s.getpeername()
文件类对象:
import socket, sysport = 70 host = sys.argv[1] filename = sys.argv[2]s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) fd = s.makefile('rw', 0)fd.write(filename + "\r\n")for line in fd.readlines():sys.stdout.write(line)
高级接口:
import urllib, sysf = urllib.urlopen(sys.argv[1]) while 1:buf = f.read(2048)if not len(buf):breaksys.stdout.write(buf)
服务器端:
1、建立一个连接:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2、设置socket选项:
//socket 端口可立即复用 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
3、绑定socket:
s.bind((host, port))
4、监听:
s.listen(1)
5、接受连接:
while 1:clientsock, clientaddr = s.accept()print "Got connection from", clientsock.getpeername()clientsock.close()
6、
#!/usr/bin/env pythonimport socket, tracebackhost = '' # Bind to all interfaces port = 51423s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port))#这里设定每次最多只有一个等候处理的请求,真正的服务器会设置一个很高的数字。 s.listen(1)while 1:try:clientsock, clientaddr = s.accept()except KeyboardInterrupt:raiseexcept:traceback.print_exc()continue# Process the connectiontry:print "Got connection from", clientsock.getpeername()# Process the request hereexcept (KeyboardInterrupt, SystemExit):raiseexcept:traceback.print_exc()# Close the connectiontry:clientsock.close()except KeyboardInterrupt:raiseexcept:traceback.print_exc()
使用UDP:
#!/usr/bin/env pythonimport socket, tracebackhost = '' # Bind to all interfaces port = 51423s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port))while 1:try:message, address = s.recvfrom(8192)print "Got data from", address# Echo it backs.sendto(message, address)except (KeyboardInterrupt, SystemExit):raiseexcept:traceback.print_exc()
转载于:https://www.cnblogs.com/L-H-R-X-hehe/p/3812630.html
Python服务器开发三:Socket相关推荐
- Python服务器开发一:python基础
Python服务器开发一:python基础 Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上 ...
- linux服务器开发三(网络编程)
转载自:http://www.cnblogs.com/zfc2201/archive/2017/05/04/6804990.html 作者:水之原 网络基础 协议的概念 什么是协议 从应用的角度出发, ...
- Python服务器开发(1)
Python的标准库里的服务器模块SocketServer可以很方便的开发简单的服务器程序 import SocketServer class MyHandler(SocketServer.Strea ...
- 【C/C++服务器开发】socket网络编程函数接口详解
文章目录 一.前言 TCP 网络编程 结合三次握手连接的 TCP socket 结合四次次挥手的 TCP socket 二.socket常用函数和数据结构 1.socket()函数 2.bind() ...
- 用python快速开发一个实用的socket服务器
用python快速开发一个实用的socket服务器 - 吴尔平 - 博客园 用python快速开发一个实用的socket服务器 首先,要明白不是所有的socket服务都需要高性能.如果要求高性能,使用 ...
- python安卓开发实例_python服务器与android客户端socket通信实例
本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...
- python socket清空接受区_原始Python服务器
之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作.而我的想法是,掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让 ...
- Python 全栈开发十 socket网络编程
一.客户端(client)服务端(sever)架构 在计算机中有很多常见的C/S架构,例如我们的浏览器是客户端.而百度网站和其他的网站就是服务端:视频软件是客户端,提供视频的腾讯.优酷.爱奇艺就是服务 ...
- 服务器开发系列(三)——Linux与Windows操作系统基础功能对比
系列文章目录 服务器开发系列(一)--计算机硬件 服务器开发系列(二)--Jetson Xavier NX 文章目录 系列文章目录 前言 一.操作系统概述 二.Linux和Windows的应用场景 三 ...
最新文章
- hive export import
- python游戏编程快速上手第四版dragon_《Python游戏编程快速上手》——导读
- Oracle中的UPDATE FROM解决方法
- HALCON 1D Measure 算子初识
- 吴江智慧城市产业化“航母”起航
- 渐渐淡去的emacs
- wordpress中文主题problog1.0发布,主打简洁,商务
- html为知笔记模板,新建笔记模板二次开发
- m2接口和nvme协议接口_怎么看笔记本的主板是支持加装m2接口和m2协议NVME接口的固态硬盘?两者有什么区别?...
- python之numpy之方差numpy.var
- mysql计算同比和环比的区别_Mysql同比环比统计
- iOS开发雕虫小技之傻瓜式定位神器-超简单方式解决iOS后台定时定位
- SVN拉取、提交文件
- 【正点原子FPGA连载】第十二章呼吸灯实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
- 955 互联网公司白名单来了!这些公司月薪 20k,没有 996!福利榜国内大厂只有这家!...
- 无极性电容的定义及应用
- 如何开搓饵不掉钩_防止小鱼闹钩的方法
- 使用微信开发者工具调试微信网页授权登录-react
- 一文详解共模电感原理及选型
- 微信保存图片提示失败_微信图片另存失败?这得从SNI说起
热门文章
- [C/C++]C++标准
- Oracle11.2.0.4 RAC安装文档
- vb.net详解MDI窗体操作方法
- 学用状态机模式,写的报销流程,请指教
- 安装后添加没有class library_《没有秘密的你》:戚薇曝光手机号,粉丝急忙添加后却甜哭了?...
- Mongodb内存管理和使用情况情况查询
- oracle 强制 断开,ORA-01092: ORACLE 例程终止 强行断开连接
- AUTOSAR从入门到精通100讲(二十四)-AUTOSAR通信篇—AUTOSAR COM模块
- c语言三个数从小到大排序/输出_我的c语言笔记(三)
- 解决 invalid input detected at ‘^’ marker的问题