python异步socket编程之一

异步网络能极大地提高程序的并行处理能力,所以写了一个专题来总结python中的异步通信。

一、同步client与同步server的通信

1.1. 《python的socket通信实例》中的例子

1. TCP server端代码

#!/usr/bin/env python

#

# -*- coding:utf-8 -*-

# File: sync_socket_server.py

#

from socket import *

from time import ctime

HOST = ‘‘

PORT = 21567

BUFSIZE=1024

ADDR=(HOST, PORT)

tcpSrvSock=socket(AF_INET, SOCK_STREAM)

tcpSrvSock.bind(ADDR)

tcpSrvSock.listen(5)

while True:

print ‘waiting for connection ...‘

tcpCliSock,addr = tcpSrvSock.accept()

print ‘... connected from:‘, addr

while True:

data=tcpCliSock.recv(BUFSIZE)

if not data:

break

tcpCliSock.send(‘[%s] %s‘%(ctime(), data))

print [ctime()],‘:‘,data

tcpCliSock.close()

tcpSrvSock.close()

2. TCP client端代码

#!/usr/bin/env python

#

# -*- coding:utf-8 -*-

# File: sync_socket_client.py

from socket import *

HOST=‘localhost‘

PORT=21567

BUFSIZE=1024

ADDR=(HOST, PORT)

tcpCliSock=socket(AF_INET, SOCK_STREAM)

tcpCliSock.connect(ADDR)

while True:

data = raw_input(‘>‘)

if not data:

break

tcpCliSock.send(data)

data=tcpCliSock.recv(BUFSIZE)

if not data:

break

print data

tcpCliSock.close()

2.2. 另一个例子

这个例子的链接:http://blog.csdn.net/joeblackzqq/article/details/34860379

一个服务端,一个客户端,而且是阻塞方式,一次只能接受一个客户端连接并通信噢。

客户端发送‘bye‘, 结束与服务端的通信,如果发送’shutdown‘,服务端将会关闭自己!

1. 服务端代码:

#!/usr/bin/env python

#

# -*- coding:utf-8 -*-

# File: sync_socket_server.py

#

from socket import *

from time import ctime

HOST = ‘‘

PORT = 21567

BUFSIZE = 1024

ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)

tcpSerSock.bind(ADDR)

tcpSerSock.listen(5)

quit = False

shutdown = False

while True:

print(‘waiting for connection...‘)

tcpCliSock, addr = tcpSerSock.accept()

print(‘...connected from: ‘, addr)

while True:

data = tcpCliSock.recv(BUFSIZE)

data = data.decode(‘utf8‘)

if not data:

break

ss = ‘[%s] %s‘ %(ctime(), data)

tcpCliSock.send(ss.encode(‘utf8‘))

print(ss)

if data == ‘bye‘:

quit = True

break

elif data == ‘shutdown‘:

shutdown = True

break

print(‘Bye-bye: [%s: %d]‘ %(addr[0], addr[1]))

tcpCliSock.close()

if shutdown:

break

tcpSerSock.close()

print(‘Server has been‘)

2. 客户端代码

#!/usr/bin/env python

#

# -*- coding:utf-8 -*-

# File: sync_socket_client.py

#

from socket import *

HOST = ‘localhost‘

PORT = 21567

BUFSIZE = 1024

ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)

tcpCliSock.connect(ADDR)

while True:

data = input(‘>‘)

if not data:

continue

print(‘input data: [%s]‘ %data)

tcpCliSock.send(data.encode(‘utf8‘))

rdata = tcpCliSock.recv(BUFSIZE)

if not rdata:

break

print(rdata.decode(‘utf8‘))

if data == ‘bye‘ or data == ‘shutdown‘:

break

tcpCliSock.close()

二、同步client与异步server的通信

1. 服务端代码

#!/usr/bin/env python

#

# -*- coding:utf-8 -*-

# File: async_socket_server.py

#

import socket

import threading

import SocketServer

class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):

def handle(self):

data = self.request.recv(1024)

cur_thread = threading.current_thread()

response = "{}: {}".format(cur_thread.name, data)

self.request.sendall(response)

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):

pass

if __name__ == "__main__":

# Port 0 means to select an arbitrary unused port

HOST, PORT = "localhost", 0

server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)

ip, port = server.server_address

# Start a thread with the server -- that thread will then start one

# more thread for each request

server_thread = threading.Thread(target=server.serve_forever)

# Exit the server thread when the main thread terminates

server_thread.daemon = True

server_thread.start()

print "Server loop running in thread:", server_thread.name

server.serve_forever()

#server.shutdown()

2. 客户端代码

#!/usr/bin/env python

#

# -*- coding:utf-8 -*-

# File: sync_socket_client.py

#

import socket

import threading

import SocketServer

def client(ip, port, message):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((ip, port))

try:

sock.sendall(message)

response = sock.recv(1024)

print "Received: {}".format(response)

finally:

sock.close()

if __name__ == "__main__":

# Port 0 means to select an arbitrary unused port

HOST, PORT = "localhost", 0

client(ip, port, "Hello World 1")

client(ip, port, "Hello World 2")

client(ip, port, "Hello World 3")

3. 多线程客户端代码

为了提高并行度,可以使用多线程方式调用

#!/usr/bin/env python

#

# -*- coding:utf-8 -*-

# File: sync_socket_client.py

#

import socket

import threading

import SocketServer

def client(ip, port, message):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((ip, port))

try:

sock.sendall(message)

response = sock.recv(1024)

print "Received: {}".format(response)

finally:

sock.close()

if __name__ == "__main__":

# Port 0 means to select an arbitrary unused port

HOST, PORT = "localhost", 0

th1 = threading.Thread(target=client, args=(ip, port, "Hello World 1",))

th2 = threading.Thread(target=client, args=(ip, port, "Hello World 2",))

th3 = threading.Thread(target=client, args=(ip, port, "Hello World 3",))

th1.start()

th2.start()

th3.start()

th1.join()

th2.join()

th3.join()

4. 输出示例

Received: Thread-2: Hello World 1

Received: Thread-3: Hello World 2

Received: Thread-4: Hello World 3

时间: 2024-10-06 07:21:21

python异步socket编程之一的相关文章

Python异步Socket编程

异步网络据说能极大的提高网络server的连接速度,所以打算写一个专题,来学习和了解异步网络.因为Python有个非常出名的异步Lib:Twisted,所以就用Python来完成. OK,首先写一个pythone socket的server段,对开放三个端口:10000,10001,10002.krondo的例子中是每个server绑定一个端口,测试的时候需要分别开3个shell,分别运行.这太麻烦了,就分别用三个Thread来运行这些services. Java代码   import optp

Python 3 socket编程

Python 3 socket编程 一 客户端/服务器架构 互联网中处处是C/S架构 1.C/S结构,即Client/Server(客户端/服务器)结构 2.在互联网中处处可见c/s架构 比如说浏览器,在线视频,各种社交软件. C/S架构与socket的关系: 我们学习socket就是为了c/s架构的开发 学习socket一定要先学习互联网协议: 1.如何基于socket编程,来开发一款自己的C/S架构软件 2..C/S架构的软件(软件属于应用层)是基于网络进行通信的 3.网络的核心即一堆协议,

【python】socket编程常量错误问题-1 'AF_INET'错误

1 2 3 4 5 6 7 8 9 # -*- coding: utf-8 -*- import socket print "Creating socket" s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  print "Done!" print "Connecting to remote host..." s.connect(("www.baidu.com", 8

Python 的 Socket 编程教程

这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs.python.org/library/socket.html 基本上,Socket 是任何一种计算机网络通讯中最基础的内容.例如当你在浏览器地址栏中输入 www.oschina.net 时,你会打开一个套接字,然后连接到 www.oschina.net 并读取响应的页面然后然后显示出来.而其他一些聊

python异步socket编程之二

三.异步client与异步server的通信 1. 服务端代码 pythone socket的server段,开放三个端口:10000,10001,10002. 例子中是每个server绑定一个端口,测试的时候需要分别开3个shell,分别运行. 这太麻烦了,就分别用三个Thread来运行这些services #!/usr/bin/env python # # -*- coding:utf-8 -*- # File: multithrd_socket_server.py # import opt

Python中socket编程

1.Socket介绍: Python中提供socket.py标准库,非常底层的接口库. Socket是一种通用的网络编程接口,和网络层次没有一一对应关系. 跨操作系统的.紧密结合tcp和udp来使用的. 接口简单,但是背后的原理不简单,ip加tcp,通过插两端.通过socket通道:连接程序. 建立关联. apc库. 加端口是因为应用程序太多了.绑定ip地址,作为假端口. 端口是由谁管理的 一般都是tcp和udp编程.Socket基本的,chatserver. 协议族:AF 表示address

Python基础-socket编程

一.网络编程 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计算机的通信. 举个例子,当你使用浏览器访问新浪网时,你的计算机就和新浪的某台服务器通过互联网连接起来了,然后,新浪的服务器把网页内容作为数据通过互联网传输到你的电脑上. 由于你的电脑上可能不止浏览器,还有QQ.Skype.Dropbox.邮件客户端等,不同的程序连接的别的计算机也会不同,所以,更确切地说,

python之socket编程

一.概述 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模

Python 006- python socket编程详细介绍

转自https://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 下面讲的是Socket模块功能 1.Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编