我正在使用Python在套接字编程中创建代理(TCP)的问题,他们使用python在客户端/服务器之间进行通信以发送消息。问题如下:我想创建客户端,代理和服务器Python应用程序,在该应用程序中,客户端只能与代理进行通信,并且代理与服务器进行通信。每个客户都会向代理发送一个号码,并等待答案。之后回答他们关闭连接。代理等待固定的n个客户端向其发送一个数字。什么时候到达n,代理将接收的号码发送到服务器(接着是端字符串),并等待它的答案。从服务器收到答案后,代理将其发送回所有客户端。此后,代理可以关闭通信。
服务器从代理n数字接收,之后,结束字符串,这表明代理不会向服务器发送任何其他消息。服务器计算平均值,并将其发送到代理。此后,它可以关闭连接。
我需要在代理上创建2个套接字对象(一个用于客户端,一个用于服务器)。请输入您的想法,如何为客户,服务器和代理编写程序?
谢谢。
您必须创建一个在客户端和代理之间连接的套接字,以及一个在代理和服务器之间连接的套接字。
插座只能传输原始字节,因此您必须以选择的方式将数字转换为字符串。您不必发送最终信号。而是一次发送所有号码。您可以使用泡菜模块将数字数组转换为字符串,将其发送然后转换为后背,或者只使用自己的字符串方法,然后再次转换为数字。
感谢您的宝贵输入。这是我创建的代码。请检查并让我知道如何使用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()
代理::
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()
用于服务器::
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,10,10,10,end end}并发送到服务器。在计算平均值(例如; AVG = 10 10 10 10/4 = 10)之后,服务器回复为代理,然后将代理发送给客户端的平均结果。
我了解您以前回复的内容,但无法在代码中实现(使用SELECT)。请参阅代码并编辑它们。我真的很感激。谢谢。