我在使用python进行套接字编程时创建代理(tcp)的问题,python在客户端/服务器之间进行通信以发送消息。问题如下: 我想创建客户端,代理和服务器python应用程序,其中客户端只能与代理通信,代理与服务器通信。 每个客户端都会向代理发送一个号码,然后等待答案。之后 回答他们关闭连接。 代理等待固定的N个客户端向其发送号码。什么时候 到达N,代理将收到的号码发送到服务器(后跟END字符串),并等待来自它的答案。收到服务器的答复后,代理会将其发送回所有客户端。在此之后,代理可以关闭通信。
服务器从代理接收N个数字,然后是END字符串, 表示代理不会向服务器发送任何其他消息。 服务器计算平均值,并将其发送给代理。在此之后,它可以关闭连接。
我是否需要在代理上创建2个套接字对象(一个用于客户端,一个用于服务器)。请输入您的想法,如何为客户端,服务器和代理编写程序?
感谢。
答案 0 :(得分:0)
您必须创建一个连接客户端和代理的套接字,以及一个连接代理和服务器的套接字。
套接字只能传输原始字节,因此您必须以您选择的方式将数字转换为字符串。您不必发送结束信号。相反,只需立即发送所有号码。您可以使用pickle模块将数字数组转换为字符串,发送它然后转换回来,或者只使用您自己的字符串化方法然后再转换为数字。
答案 1 :(得分:0)
感谢您的宝贵意见。这是我创建的代码。请检查并告诉我如何使用SELECT实现... 对于客户::::
import socket
HOST = 'localhost'
PORT = 21001
proxysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
proxysock.connect((HOST, PORT))
while 1:
x = int(raw_input())
proxysock.sendall(x)
data = proxysock.recv(1024)
proxysock.close()
For Proxy ::
import socket
from thread import *
HOST = 'localhost'
PORT = 21001
max_conn = 5
buffer_size = 2048
def start():
proxyserversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
proxyserversock.bind((HOST, PORT))
proxyserversock.listen(max_conn)
while 1:
client_sock, addr = proxyserversock.accept()
data = client_sock.recv(buffer_size)
serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversock.connect((HOST, PORT))
serversock.sendall(X)
serversock.recv(buffer_size)
client_sock.sendall()
serversock.close()
client_sock.close()
对于Server ::
import socket
HOST = 'localhost'
PORT = 21001
serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversock.bind((HOST, PORT))
s.listen(10)
while 1:
proxyclientsock, addr = serversock.accept()
data = proxyclientsock.recv(2048)
proxyclientsock.sendall()
proxyclientsock.close()
我编写了代码来连接客户端与代理和代理与客户端。请输入您的想法,N个客户端(例如,4个客户端)如何能够向代理发送整数?和代理将它们发送到服务器。我想按照以下方式实现代码: 如果有4个客户端将代码10,10,10,10发送到代理,然后是END,则代理接收它们为{10,10,10,10,end}并发送到服务器。并且在计算平均值(例如,avg = 10 + 10 + 10 + 10/4 = 10)到代理之后回复服务器,然后代理将平均结果发送回客户端。
我理解您之前回复的内容,但无法在代码中实现(使用SELECT)。请查看代码并进行编辑。我真的很感激。感谢。