Skip to content

Commit ddc6b7f

Browse files
committed
Echoserver in Python
1 parent 6dff722 commit ddc6b7f

3 files changed

Lines changed: 116 additions & 0 deletions

File tree

echo_server.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env python
2+
3+
import socket
4+
5+
#create stream socket, AF_inet adress family internet
6+
tcpsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
7+
8+
tcpsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
9+
#set options sol_socket ist das socket layer und benutzt protocal unabhaengige options
10+
#wenn bspw eine option benutzt wird beschreibt sol_socket das diese in dem socket selbst gesucht werden soll
11+
#http://pubs.opengroup.org/onlinepubs/7908799/xns/getsockopt.html
12+
13+
tcpsocket.bind(('localhost', 8000,)) #bindet den socket an eine ip und einen Port, (HOST,PORT) -tuple
14+
15+
tcpsocket.listen(10) #besagt wieviele anfragen der socket bearbeiten kann
16+
17+
print "Waiting for a client request..."
18+
19+
(client, (ip,port)) = tcpsocket.accept() #erstellt neuen sock welcher vom client benutzt wird gibt ein tuple (conn, address) zurueck
20+
21+
print "Received connection from: ", ip, port
22+
print "Starting ECHO Server"
23+
24+
data = 'dummy'
25+
26+
while len(data):
27+
data = client.recv(2048)
28+
print "Client sent: " + data
29+
client.send(data)
30+
31+
print "Closing connection...."
32+
client.close()
33+
34+
print "Shuting down server ..."
35+
36+
tcpsocket.close()

multi_process_echo_server.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/usr/bin/env python
2+
3+
import socket
4+
import multiprocessing
5+
import signal
6+
import sys
7+
8+
def worker(client):
9+
data = 'dummy'
10+
while len(data):
11+
data = client.recv(2048)
12+
print "Client sent: " + data
13+
client.send(data)
14+
15+
print "Connection closed.."
16+
client.close()
17+
18+
def ctrlcHandler(signum, frame):
19+
print "Shutting down server...:"
20+
tcp_socket.close()
21+
sys.exit(0)
22+
23+
signal.signal(signal.SIGINT, ctrlcHandler)
24+
25+
tcpsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
26+
tcpsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
27+
tcpsocket.bind(('localhost', 8000,))
28+
tcpsocket.listen(10)
29+
30+
while True:
31+
print "Waiting for client request...."
32+
(conn,address) = tcpsocket.accept()
33+
34+
print "MultiProcessEchoServer receive connection from: ", address
35+
print "Starting Echoing: ", address
36+
p = multiprocessing.Process(target=worker, args=(conn,))
37+
p.start()
38+

multi_threaded_echo_server.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/env python
2+
3+
import socket
4+
import threading
5+
import sys
6+
import signal
7+
8+
class WorkerThread(threading.Thread):
9+
def __init__(self, client):
10+
threading.Thread.__init__(self)
11+
self.client = client
12+
13+
def run(self):
14+
data = 'dummy'
15+
while len(data):
16+
data = self.client.recv(2048)
17+
print "Client sent: ", data
18+
self.client.send(data)
19+
20+
print "Closing connection..."
21+
22+
def ctrlHandler(signum, frame):
23+
print "Shutting down server ...."
24+
tcpsocket.close()
25+
sys.exit(0)
26+
27+
signal.signal(signal.SIGINT, ctrlHandler)
28+
tcpsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
29+
tcpsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
30+
tcpsocket.bind(('localhost', 8000,))
31+
tcpsocket.listen(10)
32+
33+
while True:
34+
print "Waiting for a client...."
35+
(client,(ip,port)) = tcpsocket.accept()
36+
37+
print "Received connection from client: ", ip, port
38+
print "Starting conversation...", client
39+
40+
worker = WorkerThread(client)
41+
worker.setDaemon(True)
42+
worker.start()

0 commit comments

Comments
 (0)