2016-12-06 67 views
-2

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

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

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

谢谢。

+2

你的问题很一般。尝试先写一些代码,然后如果你有一个特定的问题,你可以在这里询问它 –

+0

我对python非常陌生。所以,我可以编写客户端/服务器。但我不知道如何用代理使用select函数编写客户端/服务器。 – rahmed

+0

只是尝试搜索谷歌,有很多回答问题和指南 - https://encrypted.google.com/#q=writing%20proxy%20server%20python&safe=off –

回答

0

您必须创建一个连接客户端和代理的套接字,以及一个连接代理和服务器的套接字。

套接字只能传输原始字节,所以您必须以您选择的方式将您的数字转换为字符串。您不必发送结束信号。相反,只需一次发送所有号码。你可以使用pickle模块将一个数字数组转换为一个字符串,发送它然后转换回去,或者只是使用自己的字符串化方法,然后再次转换为数字。

+0

请检查,我已经创建了连接,但不知道如何将数字从客户端发送到代理服务器,然后从服务器发送到代理服务器到客户端。请参阅代码和通知 – rahmed

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() 

对于代理::

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代理然后END然后代理接收他们为{10,10,10,10,结束}并发送到服务器。并且在计算平均值(例如,平均值= 10 + 10 + 10 + 10/4 = 10)之后服务器回复以代理并且然后向客户端代理回送平均结果。

我明白你以前的回答,但无法在代码中实现(使用SELECT)。请参阅代码并编辑它们。我真的很感激。谢谢。

+0

您应该问这是一个新问题,而不是回答:) –

+0

我已经提问这是一个新问题。请检查并建议。 – rahmed

+0

我已经在http://stackoverflow.com/questions/41044000/creating-proxy-sending-messages-through-proxy-application上提出这个问题 – rahmed

相关问题