有问题创建代理服务器应用程序

时间:2016-12-06 11:59:56

标签: python

我在使用python进行套接字编程时创建代理(tcp)的问题,python在客户端/服务器之间进行通信以发送消息。问题如下: 我想创建客户端,代理和服务器python应用程序,其中客户端只能与代理通信,代理与服务器通信。 每个客户端都会向代理发送一个号码,然后等待答案。之后 回答他们关闭连接。 代理等待固定的N个客户端向其发送号码。什么时候 到达N,代理将收到的号码发送到服务器(后跟END字符串),并等待来自它的答案。收到服务器的答复后,代理会将其发送回所有客户端。在此之后,代理可以关闭通信。

服务器从代理接收N个数字,然后是END字符串, 表示代理不会向服务器发送任何其他消息。 服务器计算平均值,并将其发送给代理。在此之后,它可以关闭连接。

我是否需要在代理上创建2个套接字对象(一个用于客户端,一个用于服务器)。请输入您的想法,如何为客户端,服务器和代理编写程序?

感谢。

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)。请查看代码并进行编辑。我真的很感激。感谢。