Python 网络套接字编程
2016-06-06 19:45
330 查看
【网络套接字】
一、使用 TCP协议
1)客户端/Client
二、使用 UDP协议
1)客户端/Client
一、使用 TCP协议
1)客户端/Client
# 模块 socket 提供了创建网络套接字的函数 # 创建 socket 时需要指明 IP层协议 和 传输层协议 # 使用 socket 进行连接时要以 元组 的形式指明目标的 URL 和 端口号 import socket recBuffer = [] act = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 使用 IPv4 和 TCP act.connect(('10.62.36.88', 12345)) # 目标URL 和 端口号 以 元组 的形式指明 print 'Waiting for response...' while True: # 使用循环保证数据全部被接收 data = act.recv(1) # 阻塞式接收数据,每次最多接收 1Byte if data != '^': recBuffer.append(data) else: # 如果接收到的数据为空说明数据接收完毕,跳出循环 break data = ''.join(recBuffer) print data act.send('Python脚本编程之套接字') print 'Message been sent.' act.send('^') print 'Terminate signal been sent.' act.close() # 关闭socket,千万别忘了2)服务器端/Server
# 服务器端程序应该以多线程方式编写,并发处理来自多处的请求 # 服务器端运行在本地网络,监听 127.0.0.1 # 服务器端运行在本机所有网卡,监听 0.0.0.0 # 服务器端运行在指定网卡,监听该网卡IP xxx.xxx.xxx.xxx import socket, threading def newConnection(newSocket, newAddress): # 负责处理连接请求的子线程所调用的函数 recBuffer = [] print 'new connection request detected, IP is %s port %s' %(newAddress) newSocket.send('Server is dealing with your request. Your IP is %s port %s\nPlease standby...' %(newAddress)) print 'Message been sent. Waiting for response...' newSocket.send('^') print 'Terminate signal been sent.' while True: data = newSocket.recv(1) if not data or data == '^': # 如果接收到的数据为空,或客户端发送了 '^' 则停止接收数据 break else: recBuffer.append(data) data = ''.join(recBuffer) print data print 'link going down, target IP is %s port %s' %(newAddress) newSocket.close() # 一定不要忘了关闭 socket act = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 使用 IPv4 和 TCP act.bind(('10.62.36.88', 12345)) # 绑定主机上 IP 为 10.62.36.88 的网卡,打开端口 12345 等待连接 print 'Listening on port 12345, max number of link is 10...' act.listen(10) # 开始监听 12345 端口,并设置最大连接数为 10 while True: newSocket, newAddress = act.accept() # 阻塞式接受连接请求,返回值是一个 (sock, addr)元组 thr = threading.Thread(target = newConnection, args = (newSocket, newAddress)) # 新建线程去处理请求 thr.start() # 启动线程
二、使用 UDP协议
1)客户端/Client
import socket act = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print 'Ready to send UDP data to 10.62.36.88...' while True: data = raw_input('data to send: ') if data != 'disconnect': act.sendto(data, ('10.62.36.88', 12345)) data = act.recv(512) print data else: break act.close()2)服务器端/Server
# UDP是 面向无连接 的协议,传输速度比 TCP协议快,但不如 TCP协议可靠 # UDP协议 与 TCP协议 可以同时使用一个端口 # 因为 UDP协议监听所有发到指定端口的数据,所以在本示例的情形下不使用多线程也可以接收多个客户端数据 import socket act = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 使用 IPv4 和 UDP print 'Waiting UDP data on port 12345...' act.bind(('10.62.36.88', 12345)) while True: newData, newAddress = act.recvfrom(512) print newAddress, newData act.sendto('-- Reply from server: data recieved! --', newAddress)
相关文章推荐
- Android HttpURLConnection的简单使用
- 网络资源
- HTTP协议报文、工作原理及Java中的HTTP通信技术详解
- socket与TCP/UDP编程
- http协议下的keep alive
- 腾讯兴趣部落可以发外部链接了
- 网站app被劫持怎么办?HTTPDNS阿里云域名防劫持, DNSPod 移动解析服务 D+
- 表单提交原理
- ios网络请求报错:The resource could not be loaded because the App Transport Security policy requires the us
- dumpheaders_http_threading_server.py脚本的Python 3.5迁移版
- HttpClient 4.4 请求
- ubuntu14.04 NFS环境的搭建
- The type org.apache.http.HttpResponse cannot be resolved. It is indirectly referenced from required
- 2016 ISCC CTF 比赛 WEB类第一题
- Google 深度学习笔记 卷积神经网络
- 【snmp】华为和H3C 网络设备设置snmp
- TensorFlow 深度学习笔记 卷积神经网络
- 卷积神经网络
- TCP状态变迁图
- TCP 状态变迁图说明 【转】