Dec-06-2019, 02:16 PM
Hi guys, I was trying to get the user input from the command line (ubuntu to be precise) so like when a person enters the command to run the program with arguments (port number, buffer length & IP address) the program runs the client part of it. client then takes the length of buffer, takes the port number and ip from command line and assigns to the variables. it then generates a random number between 1 and 100 and sends to the port entered. Then when they enter the command to run the server side code with argument (port number only), the server listen to the port and receives the data and sends it back to the client.
the buffer length is to specify how much data the client will transmit to server.
the commands are as follows.
./clientServer.py –t –p 5001 –l 1000 –ip 127.0.0.1
where -t to run the client part of code
-p to indicate port number
-l for buffer length
-IP for loop back address. (in real environment the same code will run on 2 different machines, one will run the client part of code and one will run the server part of code)
./clientServer.py –r –p 5001
where -r to run the server part of code
-p for the port number
but i am having issues in running the file.
like it acknowledges the connection on server side but seems like client part is stuck in an infinite loop. can anyone point out and give me advice for that please?
so if anyone can help me i would really appreciate that and will be really thankful to you.
the buffer length is to specify how much data the client will transmit to server.
the commands are as follows.
./clientServer.py –t –p 5001 –l 1000 –ip 127.0.0.1
where -t to run the client part of code
-p to indicate port number
-l for buffer length
-IP for loop back address. (in real environment the same code will run on 2 different machines, one will run the client part of code and one will run the server part of code)
./clientServer.py –r –p 5001
where -r to run the server part of code
-p for the port number
but i am having issues in running the file.
like it acknowledges the connection on server side but seems like client part is stuck in an infinite loop. can anyone point out and give me advice for that please?
so if anyone can help me i would really appreciate that and will be really thankful to you.
import socket import time import argparse from random import randint clientSock= socket.socket(socket.AF_INET, socket. SOCK_STREAM) #here is the argv pasrse parser = argparse.ArgumentParser(description = 'sending data to server and back to client') parser.add_argument('-t', action='store_true', help='transmission') parser.add_argument('-r', action='store_true', help='recieving') parser.add_argument('-ip', default=('127.0.0.1'), help='this is ip address') parser.add_argument('-p', type=int, default=5001, help='this is port number') parser.add_argument('-l', type=int, default=8192, help='this is buffer size') args = parser.parse_args() hostAddr = args.ip port = args.p bufferLenght = args.l if args.t: clientSock.connect((hostAddr, port)) buffcounter = 0 dataOutBytes = '' for x in range (bufferLenght): number = randint(1,9) dataOutStr= bin(number).replace("0b", "") dataOutBytes+= dataOutStr dataOutBytes = dataOutStr.encode() numBytes= len(dataOutBytes) start = time.time() clientSock.sendall(dataOutBytes) #============================================================================ #loop until all data recieved dataInBytes= b'' while len(dataInBytes) < numBytes: dataInBytes+= clientSock.recv(numBytes-len(dataInBytes)) if not dataInBytes: break dataInStr= dataInBytes.decode() remoteAddr= clientSock.getpeername() print( "received", dataInStr, "back from server", remoteAddr) print ("it took ", time.time()-start) clientSock.close() elif args.r: serverSock= socket.socket(socket.AF_INET,socket.SOCK_STREAM) serverSock.bind(('', port)) serverSock.listen() print ("The server is ready to receive!") while True: connectSock, clientAddr= serverSock.accept() print( "Connection from", clientAddr) while True: # keep receiving until client close message = connectSock.recv(1024) if not message: break connectSock.sendall(message) connectSock.close()