From: Adriana Draghici Date: Fri, 16 Apr 2010 08:58:02 +0000 (+0000) Subject: autorun: socket recv big size data X-Git-Tag: getopt_long~74 X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=commitdiff_plain;h=9eac847459ab8bd2d60495cb96c9974ca7f8c830;p=cs-p2p-next.git autorun: socket recv big size data --- diff --git a/autorun/Util.py b/autorun/Util.py index f77053a..1108b7e 100644 --- a/autorun/Util.py +++ b/autorun/Util.py @@ -7,6 +7,7 @@ SERVER_PORT = 10004 SERVER_HOST = "127.0.0.1" SESSIONS_FILE = "/home/p2p/sessions.txt" # TO CHANGE +BUFFER_SIZE = 4096 """ Message types: client -> server """ diff --git a/autorun/server/Client.py b/autorun/server/Client.py index 0e08616..0ec782e 100644 --- a/autorun/server/Client.py +++ b/autorun/server/Client.py @@ -1,7 +1,6 @@ import sys,time, socket import pickle from Util import * -MSGLEN = 1024 DEBUG = True class MySocket: def __init__(self, sock=None): @@ -39,7 +38,7 @@ class MySocket: def recv_msg(self): msg = '' - chunk = self.sock.recv(MSGLEN) + chunk = self.sock.recv(BUFFER_SIZE) if chunk == '': raise RuntimeError, "socket connection broken" msg = msg + chunk @@ -49,8 +48,10 @@ class MySocket: # while chunk: # chunk = clientsock.recv(BUFFER_SIZE) # data += chunk + print "astept sa primesc ceva de la server" data = self.recv_msg() dd = pickle.loads(data) + print "am primit ", dd return dd # send a pickled dictionary diff --git a/autorun/server/Server.py b/autorun/server/Server.py index 296e456..31378e2 100644 --- a/autorun/server/Server.py +++ b/autorun/server/Server.py @@ -16,7 +16,6 @@ class MyDaemon(Daemon): ip = "" port = 0 - BUFFER_SIZE = 4096 DEBUG = True processes = {} # keeps lists of file descriptors for each process @@ -41,9 +40,22 @@ class MyDaemon(Daemon): # while chunk: # chunk = clientsock.recv(self.BUFFER_SIZE) # data += chunk - data = clientsock.recv(self.BUFFER_SIZE) - dd = pickle.loads(data) + + msg = '' + while 1: + chunk = clientsock.recv(BUFFER_SIZE) + if not chunk: + break + #raise RuntimeError, "socket connection broken" + + msg = msg + chunk + if len(chunk) < BUFFER_SIZE: + break + + dd = pickle.loads(msg) + #print "am primit mesajul: ", dd return dd + def send_pickled_data (self, clientsock, data): dumped_data = pickle.dumps(data) totalsent = 0 @@ -163,7 +175,7 @@ class MyDaemon(Daemon): elif msg[0] == GET_CLIENTS: pass elif msg[0] == GET_OUTPUT: - + #f = open(SESSIONS_FILE, ) pass else: diff --git a/autorun/server/Server_NO_DAEMON.py b/autorun/server/Server_NO_DAEMON.py deleted file mode 100644 index fde9001..0000000 --- a/autorun/server/Server_NO_DAEMON.py +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env python - -import sys, os, socket -import pickle -import signal -from daemon import Daemon -from Util import * -from Util import SERVER_HOST, SERVER_PORT -from BitTorrentClientRun import * -from TransmissionRun import * -from TriblerRun import * -BUFFER_SIZE = 4096 - -processes = {} - -DEBUG = True - -def recv_pickled_data(clientsock): - # while chunk: - # chunk = clientsock.recv(BUFFER_SIZE) - # data += chunk - data = clientsock.recv(BUFFER_SIZE) - dd = pickle.loads(data) - return dd - -def send_pickled_data (clientsock, data): - dumped_data = pickle.dumps(data) - totalsent = 0 - while totalsent < len(dumped_data): - sent = clientsock.send(dumped_data[totalsent:]) - if sent == 0: - raise RuntimeError, "socket connection broken" - totalsent = totalsent + sent - -def start_bt_client(bt_client_data): - - btcr = None - - if bt_client_data[CLIENT] == TRANSMISSION: - #btcr = TransmissionRun("/usr/bin/transmissioncli") - btcr = TransmissionRun(bt_client_data[BASE_DIR]) - elif bt_client_data[CLIENT] == TRIBLER: - btcr = TriblerRun(bt_client_data[BASE_DIR]) - # btcr = TriblerRun("/home/p2p/p2p-clients/tribler") - - else: - return -1 - - btcr.config_run(bt_client_data[DL_DIR], bt_client_data[LOG_DIR], - bt_client_data[OUT_FILE], bt_client_data[LOG_DIR], - bt_client_data[LOG_FILE], bt_client_data[PORT], - bt_client_data[TORRENT]) - - btcr.start() - [pid, log_fd, output_fd] = btcr.run_client(btcr.simple_run_command) - processes[pid] = (log_fd, output_fd) - print processes[pid] - if(DEBUG): - print "Server: started client with pid = ", pid - return pid - - """Simple test - - btcr = TransmissionRun("/usr/bin/transmissioncli") - btcr.config_run("/home/adriana/p2p/p2p-dld/transmission", - "/home/adriana/p2p/p2p-log/transmission", - "scrubs.out", "/home/adriana/p2p/", - "transmission-scrubs.log", 10150, - "/home/adriana/p2p/p2p-meta/scrubs.torrent") - - btcr.start() - btcr.run_client(btcr.simple_run_command) - """ - -def stop_bt_client(pid): - - int_pid = int(pid) - os.kill(int_pid, signal.SIGKILL) # kill generates zombies - os.wait() - processes[int_pid][0].close() - processes[int_pid][1].close() - del processes[int_pid] - if(DEBUG): - print "Server: killed process with pid = ", pid - -def doServer(): - - serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - if(DEBUG): - print "Server: host ip = %s, port = %d"%(SERVER_HOST,SERVER_PORT) - serversocket.bind((SERVER_HOST, SERVER_PORT)); - serversocket.listen(10) #max 10 requests - clientsocks = [] - while(1): - if(DEBUG): - print "Server: accepting connections" - (clientsock, address) = serversocket.accept(); - if(DEBUG): - print "Server: accepted connection from ", address - - msg = recv_pickled_data(clientsock) - if(DEBUG): - print "Server: received message:\n", msg - - - if msg[0] == START_MSG: - bt_client_data = msg[1] - client_pid = start_bt_client(bt_client_data) - send_pickled_data(clientsock, (ACK_MSG, client_pid)) - - elif msg[0] == STOP_MSG: - client_pid = msg[1] - if(DEBUG): - print "Server: received message:\n", msg - stop_bt_client(client_pid) - send_pickled_data(clientsock, (ACK_MSG,"")) - - else: - - send_pickled_data(clientsock,( ERROR_MSG,"Error: wrong message type ")) - - # clientsock.recv(BUFFER_SIZE) - # recv_pickled_data(clientsock) - clientsock.close() - -if __name__ == "__main__": - doServer() -