2016-12-06 8 views
-2

メッセージを送信するためにクライアント/サーバー間で通信するPythonを使用してソケットプログラミングでプロキシ(tcp)を作成する際に問題が発生しています。問題は次の通りです。 クライアントがプロキシと通信できるのと、プロキシがサーバーと通信できるクライアント、プロキシ、サーバーのPythonアプリケーションを作成したいと思います。 各クライアントはプロキシに番号を送信し、応答を待ちます。 の応答後、接続を閉じます。 プロキシは、固定N個のクライアントが番号を送信するのを待ちます。 Nに達すると、プロキシは受信した番号をサーバーに送信し(END文字列が続きます)、応答を待ちます。サーバーからの応答を受け取った後、プロキシはそれをすべてのクライアントに返します。この時点の後、プロキシは通信を閉じることができます。プロキシサーバーアプリケーションの作成に問題がある

サーバはN個の数字の後にプロキシが他のメッセージをサーバに送信しないことを示すEND文字列 をプロキシから受信します。 サーバは平均を計算し、それをプロキシに送信します。この後、接続を閉じることができます。

プロキシで2つのソケットオブジェクトを作成する必要があります(クライアント用、サーバー用)。あなたの考えを入力してください、どのようにクライアント、サーバー、プロキシのためのプログラムを書くことができますか?

ありがとうございました。

+2

あなたの質問は非常に一般的です。最初にいくつかのコードを書こうとすると、特定の問題がある場合は、ここでそれについて尋ねることができます –

+0

私は非常にPythonに慣れています。だから、私はクライアント/サーバーを書くことができます。しかし、私はどのように選択機能を使用してプロキシを使用してクライアント/サーバーを書くか分からない。 – rahmed

+0

ちょうどGoogleを検索しようとすると、そこに多くの回答の質問とガイドがあります - https://encrypted.google.com/#q=writing%20proxy%20server%20python&safe=off –

答えて

0

クライアントとプロキシの間を接続する1つのソケットと、プロキシとサーバーを接続する1つのソケットを作成する必要があります。

ソケットは生のバイトだけを転送できるため、選択した方法で数字を文字列に変換する必要があります。終了信号を送信する必要はありません。代わりに、ただちにすべての番号を送信してください。 pickleモジュールを使用して数値の配列を文字列に変換し、それを送信してから変換したり、独自の文字列変換方法を使用して数値に変換し直すことができます。

+0

私は接続を作成しましたが、クライアントからプロキシ/サーバへの番号の送信方法を知りません。コードを見て、アドバイスをしてください – rahmed

0

貴重なご意見ありがとうございます。ここに私が作成したコードがあります。プロキシのクライアント::::

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

について... をチェックして、私はSELECT使用して実装することができますどのように教えてください::サーバー::

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() 
については

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

クライアントにプロキシとプロキシをクライアントに接続するコードを記述しました。 N個のクライアント(例:4クライアント)が整数値をプロキシに送信する方法を考えてください。プロキシはそれらをサーバーに送信します。私は以下のようにコードを実装したい: 10、10,10,10のような番号を4つのクライアントに送り、プロキシにENDをつけてからプロキシを{10,10,10,10、end}として受け取りサーバ。平均(例えば、avg = 10 + 10 + 10 + 10/4 = 10)をプロキシに計算した後にサーバが応答し、プロキシがクライアントに平均結果を返送する。

私は前に返信したことを理解していますが、コードで実装することはできません(SELECTを使用)。コードを見て編集してください。私は本当に感謝します。ありがとう。

+0

あなたは答えとしてではなく、新しい質問としてこれを尋ねるべきです:) –

+0

私はこれを新しい質問として尋ねました。確認してお勧めします。 – rahmed

+0

私はこれを新しい質問としてhttp://stackoverflow.com/questions/41044000/creating-proxy-sending-messages-through-proxy-applicationに依頼しました – rahmed

関連する問題