我对python有点陌生。我正在尝试在一个程序中创建和使用一个套接字列表/数组。所以我声明了一个数组,如下所示:
myCSocks = ['CSock1', 'CSock2', 'CSock3', 'CSock4', 'CSock5']
我尝试使用数组元素如下:
^{pr2}$我得到以下错误:
Traceback (most recent call last):
File "./htmlserv_multi.py", line 22, in <module>
message = myCSocks[i].recv(1024)
AttributeError: 'str' object has no attribute 'recv'
这对我来说是有意义的,它是说我的数组元素是String类型的,不是套接字。所以我知道我的问题是什么,但我不知道如何补救它。我在google上搜索了“sockets列表python”,但是没有找到任何东西。任何帮助将不胜感激。谢谢您。在
PS:我的最终目标是创建一个非常简单的多线程TCP web服务器(使用python)
代码:
#! /usr/bin/env python
from socket import *
#does this work?
myCSocks = []
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('192.168.1.4',12000))
serverSocket.listen(5)
while True:
for i in range(0, len(myCSocks)+1):
myCSocks[i], addr = serverSocket.accept()
try:
for i in range(0, len(myCSocks)):
message = myCSocks[i].recv(1024)
filename = message.split()[1]
f = open(filename[1:])
outputdata = f.read()
myCSocks[i].send('HTTP/1.1 200 OK\r\n\r\n')
for p in range(0, len(outputdata)):
myCSocks[i].send(outputdata[p])
myCSocks[i].close()
except IOError:
connectionSocket.send('HTTP/1.1 404 Bad Request\r\n\r\n')
connectionSocket.send('<HTML><p>ERROR 404: BAD REQUEST!</p></HTML>')
serverSocket.close()
exit()
请看一下这里的内置套接字模块(http://docs.python.org/2/library/socket.html)。这允许您创建套接字,发送和接收数据,在线文档中有一些简单的示例。如果将字符串替换为实际的套接字,则代码可能会正常工作。如果要按名称存储多个套接字,可以使用字典:
等等
如果CSock1是一个已经定义的类,那么只需引用该类对象。但是,如果您正在尝试多线程,有更好的方法来实现这一点:Multithreaded web server in python。如果您只是尝试使用套接字,我会看一下Multi Threaded TCP server in Python(第二个答案是最好的)。在
一个非常简单的echo TCP(
SOCK_STREAM
)服务器,演示如何实现多处理服务器。利用threadPoolExecutor
来 异步接受连接。在服务器:
向服务器发送数据的客户端。在
客户:
^{pr2}$f型琴弦需要python3.6及更高版本
concurrent futures需要python3.2及更高版本
相关问题 更多 >
编程相关推荐