码迷,mamicode.com
首页 > 其他好文 > 详细

socket 编程实例

时间:2019-12-14 17:17:05      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:future   mit   submit   表示   ica   编程   lex   break   支持   

1.socket编程

   软件测试并jmeter为的是实现客户端并发,jmeter 的原理是使用线程池,

   而软件开发的目的是为实现服务端的并发支持多用户同时并发工作

2. 基于多线程实现套接字服务端实现并发

客户端: 

‘‘‘
客户端只要单用户循环通信
‘‘‘
import socket
client = socket.socket()
client.connect((‘127.0.0.1‘,8090))
while True:
client.send(‘33‘.encode(‘utf-8‘))
data = client.recv(1024)
print(data)

‘‘‘
服务端要实现多用户连接 并实现循环通信
‘‘‘
方式1: 线程池
import socket
from concurrent.futures import ThreadPoolExecutor

server = socket.socket()

server.bind(
(‘127.0.0.1‘, 9000)
)

server.listen(5)


# 1.封装成一个函数 多用户实现循环通信 一个用户创建一个通道
def run(conn):
while True:
try:
data = conn.recv(1024)
if len(data) == 0:
break
print(data.decode(‘utf-8‘))
conn.send(‘111‘.encode(‘utf-8‘))

except Exception as e:
break

conn.close()


if __name__ == ‘__main__‘:
print(‘Server is run....‘)
pool = ThreadPoolExecutor(50)
while True:
conn, addr = server.accept()
print(addr)
pool.submit(run, conn)



方式2: 直接循环不设置并发数
def communicate(conn):   #  一个用户一个通道
while True:
try:
data = conn.recv(1024)
if len(data) == 0:
break
conn.send(data.upper())
except Exception as e:
print(e)
break
conn.close()


def server():
server = socket.socket()
server.bind((‘127.0.0.1‘,8989))
server.listen(5)
while True:
conn,addr = server.accept()
t = Thread(target= communicate,args=(conn,) ) # 因为python中的() 既可以表示数学公式中的小括号,又可以表示元组
t.start() # 执行communicate函数 server函数为一个线程,start()会令启一个线程

if __name__ == ‘__main__‘:
s = Thread(target = server)
s.start()


socket 编程实例

标签:future   mit   submit   表示   ica   编程   lex   break   支持   

原文地址:https://www.cnblogs.com/bigbox/p/12040209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!