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相关推荐

  1. Python服务器开发一:python基础

    Python服务器开发一:python基础 Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上 ...

  2. linux服务器开发三(网络编程)

    转载自:http://www.cnblogs.com/zfc2201/archive/2017/05/04/6804990.html 作者:水之原 网络基础 协议的概念 什么是协议 从应用的角度出发, ...

  3. Python服务器开发(1)

    Python的标准库里的服务器模块SocketServer可以很方便的开发简单的服务器程序 import SocketServer class MyHandler(SocketServer.Strea ...

  4. 【C/C++服务器开发】socket网络编程函数接口详解

    文章目录 一.前言 TCP 网络编程 结合三次握手连接的 TCP socket 结合四次次挥手的 TCP socket 二.socket常用函数和数据结构 1.socket()函数 2.bind() ...

  5. 用python快速开发一个实用的socket服务器

    用python快速开发一个实用的socket服务器 - 吴尔平 - 博客园 用python快速开发一个实用的socket服务器 首先,要明白不是所有的socket服务都需要高性能.如果要求高性能,使用 ...

  6. python安卓开发实例_python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...

  7. python socket清空接受区_原始Python服务器

    之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作.而我的想法是,掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让 ...

  8. Python 全栈开发十 socket网络编程

    一.客户端(client)服务端(sever)架构 在计算机中有很多常见的C/S架构,例如我们的浏览器是客户端.而百度网站和其他的网站就是服务端:视频软件是客户端,提供视频的腾讯.优酷.爱奇艺就是服务 ...

  9. 服务器开发系列(三)——Linux与Windows操作系统基础功能对比

    系列文章目录 服务器开发系列(一)--计算机硬件 服务器开发系列(二)--Jetson Xavier NX 文章目录 系列文章目录 前言 一.操作系统概述 二.Linux和Windows的应用场景 三 ...

最新文章

  1. hive export import
  2. python游戏编程快速上手第四版dragon_《Python游戏编程快速上手》——导读
  3. Oracle中的UPDATE FROM解决方法
  4. HALCON 1D Measure 算子初识
  5. 吴江智慧城市产业化“航母”起航
  6. 渐渐淡去的emacs
  7. wordpress中文主题problog1.0发布,主打简洁,商务
  8. html为知笔记模板,新建笔记模板二次开发
  9. m2接口和nvme协议接口_怎么看笔记本的主板是支持加装m2接口和m2协议NVME接口的固态硬盘?两者有什么区别?...
  10. python之numpy之方差numpy.var
  11. mysql计算同比和环比的区别_Mysql同比环比统计
  12. iOS开发雕虫小技之傻瓜式定位神器-超简单方式解决iOS后台定时定位
  13. SVN拉取、提交文件
  14. 【正点原子FPGA连载】第十二章呼吸灯实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  15. 955 互联网公司白名单来了!这些公司月薪 20k,没有 996!福利榜国内大厂只有这家!...
  16. 无极性电容的定义及应用
  17. 如何开搓饵不掉钩_防止小鱼闹钩的方法
  18. 使用微信开发者工具调试微信网页授权登录-react
  19. 一文详解共模电感原理及选型
  20. 微信保存图片提示失败_微信图片另存失败?这得从SNI说起

热门文章

  1. [C/C++]C++标准
  2. Oracle11.2.0.4 RAC安装文档
  3. vb.net详解MDI窗体操作方法
  4. 学用状态机模式,写的报销流程,请指教
  5. 安装后添加没有class library_《没有秘密的你》:戚薇曝光手机号,粉丝急忙添加后却甜哭了?...
  6. Mongodb内存管理和使用情况情况查询
  7. oracle 强制 断开,ORA-01092: ORACLE 例程终止 强行断开连接
  8. AUTOSAR从入门到精通100讲(二十四)-AUTOSAR通信篇—AUTOSAR COM模块
  9. c语言三个数从小到大排序/输出_我的c语言笔记(三)
  10. 解决 invalid input detected at ‘^’ marker的问题