Untitled
unknown
python
2 years ago
2.0 kB
11
Indexable
import argparse
import socket
def recvall(sock, length):
data = b''
while len(data) < length:
more = sock.recv(length - len(data))
if not more:
raise EOFError(f"Was expecting {length} bytes but only received {len(data)} bytes before the socket closed")
data += more
return data
def server(interface, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((interface, port))
sock.listen(1)
print('Listening at', sock.getsockname())
while True:
print('Waiting to accept a new connection')
sc, sockname = sock.accept()
print('We have accepted a connection from', sockname)
print('Socket name:', sc.getsockname())
print('Socket peer:', sc.getpeername())
message = recvall(sc, 12)
msg = message.decode()
rev = msg.split(' ')
line = rev[1] + ' ' + rev[0]
print('Incoming sixteen-octet message:', repr(message))
sc.sendall(line.encode())
sc.close()
print('Reply sent, socket closed')
def client(host, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
print('Client has been assigned socket name', sock.getsockname())
sock.sendall(b'Pavlat Oleksandr 123')
reply = recvall(sock, 12)
print('The server said', repr(reply))
sock.close()
if __name__ == '__main__':
choices = {'client': client, 'server': server}
parser = argparse.ArgumentParser(description='Send and receive over TCP')
parser.add_argument('role', choices=choices, help='which role to play')
parser.add_argument('host', help='interface the server listens at; host the client sends to')
parser.add_argument('-p', metavar='PORT', type=int, default=1060, help='TCP port (default 1060)')
args = parser.parse_args()
function = choices[args.role]
function(args.host, args.p)Editor is loading...