【发布时间】:2014-08-19 11:25:00
【问题描述】:
我是在 python 中使用套接字的新手,所以我想创建简单的服务器:客户端可以连接并等待一段时间。
我的问题是 - 当我从第一个客户端(client.py)连接到服务器时 - 服务器记录了它,但同时我从另一个客户端连接到服务器(平板电脑网络浏览器) - 并且服务器不记录它。他不向第二个客户端发送消息,就好像它不存在一样。但在代码中我有listen(2)!
这是否意味着我必须为每个新连接创建新进程?将来我想创建一个非常简单的聊天(多人,2 合一个聊天室)进行培训。或者我可以在 clients 列表中收集有关客户端的连接信息,然后为两个人创建进程吗?
settings.py
number_of_connections = 2
host = ''
port = 9090
server.py
import time
from socket import socket, AF_INET, SOCK_STREAM
from multiprocessing import Process
from settings import host, port, number_of_connections
def logging(message):
print(message)
with open('log.txt', 'a') as f:
f.write('%s\n' % message)
clients = []
sock = socket(AF_INET, SOCK_STREAM)
sock.bind((host, port))
sock.listen(number_of_connections)
conn, addr = sock.accept() # accept connection. conn - new socket, addr - client`s adress
clients.append((conn, addr))
#conn.settimeout(60)
logging('%s Connection from %s:%s' % (time.ctime(), addr[0], addr[1]))
while True:
data = conn.recv(1024)
if not data:
break
udata = data.decode("utf-8")
logging("Server recieve Data: %s" % udata)
#conn.send(data.upper())
conn.send(b"Hello! From server!\n")
conn.send(b"Your data: " + udata.encode("utf-8"))
# if we had 2 clients, create process?
if len(clients) == 2:
print(clients)
clients.clear()
client.py
from socket import socket, AF_INET, SOCK_STREAM
from settings import host, port
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((host, port))
sock.send(b'hello, world! From client')
while True:
data = sock.recv(1024)
print(data)
非常感谢!
【问题讨论】:
-
你的服务器只允许一个连接