python学习(20) 网络编程
2018-01-02 21:34
495 查看
原文链接:http://www.limerence2017.com/2018/01/02/python20/
python 网络编程和基本的C语言编程一样,效率不是很高,如果为了封装通信库
建议采用C/C++做底层封装,采用epoll、poll、iocp等网络模型封装,编译成网络库
供其他模块使用。这里在python学习过程中介绍一下
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AF_INET表示网络通信,SOCK_STRAM表示面向字节流TCP方式通信。
2
s.bind((‘127.0.0.1’,9999))
3
s.listen(5)
5,表示监听队列最大多长。
4
sock, addr = s.accept()
s为生成的socket,accept接收客户端连接,返回对端描述符和地址
5
data = sock.recv(1024)
sock为对端socket,recv接收数据,最多接收1024
6
sock.send((‘Hello, %s’ %data.decode(‘utf-8’)).encode(‘utf-8’))
7
sock.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2
s.connect((‘127.0.0.1’, 9999))
3
s.send(data)
s.recv(1024).decode(‘utf-8’)
4
s.close()
服务端案例:
客户端:
客户端也不需要connect。
服务端 示例:
服务器端绑定好端口和地址后,调用recvfrom返回数据和对端地址
客户端 示例:
客户端发送数据和接收数据和之前一样,仅仅是不需要调用connect连接服务器了。
谢谢关注我的公众号:
python 网络编程和基本的C语言编程一样,效率不是很高,如果为了封装通信库
建议采用C/C++做底层封装,采用epoll、poll、iocp等网络模型封装,编译成网络库
供其他模块使用。这里在python学习过程中介绍一下
TCP 编程 服务器端
1创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AF_INET表示网络通信,SOCK_STRAM表示面向字节流TCP方式通信。
2
绑定端口和地址
s.bind((‘127.0.0.1’,9999))
3
监听套接字
s.listen(5)
5,表示监听队列最大多长。
4
接收客户端连接
sock, addr = s.accept()
s为生成的socket,accept接收客户端连接,返回对端描述符和地址
5
接收数据
data = sock.recv(1024)
sock为对端socket,recv接收数据,最多接收1024
6
发送数据
sock.send((‘Hello, %s’ %data.decode(‘utf-8’)).encode(‘utf-8’))
7
关闭描述符
sock.close()
TCP客户端编程
1创建一个socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2
建立连接、
s.connect((‘127.0.0.1’, 9999))
3
接收消息和发送消息
s.send(data)
s.recv(1024).decode(‘utf-8’)
4
关闭描述符
s.close()
服务端案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import socket import threading import time #线程处理函数 def tcplink(sock, addr): print('Accept new connection from %s:%s...' % addr) sock.send(b'Welcome!') while True: data = sock.recv(1024) time.sleep(1) if not data or data.decode('utf-8')=='exit': break sock.send(('Hello, %s' %data.decode('utf-8')).encode('utf-8')) sock.close() print('Connection from %s:%s closed.'%addr) #服务器tcp编程流程 #创建套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #绑定套接字 s.bind(('127.0.0.1',9999)) #监听套接字 s.listen(5) print('Waiting for connection...') # 调用accept接受连接 while True: # 接收新的连接 sock, addr = s.accept() # 创建新的线程处理TCP t = threading.Thread(target=tcplink,args=(sock,addr)) t.start() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import socket #创建一个socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接: s.connect(('127.0.0.1', 9999)) # 接收欢迎消息: print(s.recv(1024).decode('utf-8')) for data in [b'Michael', b'Tracy', b'Sarah']: # 发送数据: s.send(data) print(s.recv(1024).decode('utf-8')) s.send(b'exit') s.close() |
UDP通信
udp通信和tcp通信不一样,很简单。服务器端不需要监听和accept,客户端也不需要connect。
服务端 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定端口: s.bind(('127.0.0.1', 9999)) print('Bind UDP on 9999...') while True: # 接收数据: data, addr = s.recvfrom(1024) print('Received from %s:%s.' % addr) s.sendto(b'Hello, %s!' % data, addr) |
客户端 示例:
1 2 3 4 5 6 7 8 9 | import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) for data in [b'Michael', b'Tracy', b'Sarah']: # 发送数据: s.sendto(data, ('127.0.0.1', 9999)) # 接收数据: print(s.recv(1024).decode('utf-8')) s.close() |
谢谢关注我的公众号:
相关文章推荐
- Python学习笔记16:网络编程
- Python之网络编程学习笔记
- Arduino 各种模块篇 [留个小任务,现在去学习python 网络编程]
- python学习之路-socket网络编程-day07
- Python学习笔记(十)——Python 网络编程
- python之网络编程学习小结
- 网络编程之python zeromq学习系列之一
- python学习八:网络编程初探
- Python学习笔记(五)——模块|图形界面|网络编程
- python 网络编程学习 - 1
- python 网络编程学习: 2 SOCKET - cacique - 博客园
- Python学习笔记(4)-- 网络编程(1)-- socket
- Python学习(20):Python函数(4):关于函数式编程的内建函数
- Python学习--19 网络编程
- python学习之【16】网络编程
- Python学习笔记17:网络客户端编程
- python基础教程_学习笔记24:网络编程、Python和万维网
- Python学习之网络编程Socket
- 23. Python脚本学习笔记二十三网络编程
- Python学习笔记:网络编程(socket)