The scripts are to be run in two terminal windows on the same machine.
- Run the server script and the server will start to listen call from port 5000.
- Run the client script in the same machine, the client will start to connect with the server through port 5000.
- In the client, enter any message and send it to the server.
- See what happens in the server.
- In the client, enter c to close the client connection without closing the server.
- While the server is still running, you may start a new client in another terminal window to call the server.
- In the client, enter x to close both the client and the server.
Source Code
Server Side
# TCP server example
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", 5000))
server_socket.listen(1)
mEndServer = False
while not mEndServer:
print "Waiting for call..."
client_socket, address = server_socket.accept()
print "I got a connection from ", address
# handle a client connection
while True:
data = client_socket.recv(512)
if data=='x':
# ending server
print "Server is closed\n"
mEndServer = True
break
elif data=='c':
# close client only without
# ending server
print "Client is closed\n"
client_socket.close()
break
elif data <> False:
print "RECEIVED from client:" , data
#print "Client is waiting for me..."
#mres = raw_input("Press Enter to send back...")
mMsg = "Your data is %s\n" % data
client_socket.send(mMsg)
Client Side
# TCP client example
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 5000))
while True:
data = raw_input("Message sent to server:")
client_socket.send(data)
if data == 'x':
# tell server to close
break
if data == 'c':
# close client only
break
if data == '':
# close client only
break
print "Waiting for server to feed back..."
data = client_socket.recv(512)
print "RECEIVED from server:" , data
client_socket.close()
If you want to connect to the server with a different machine on the network, you should change localhost in the client script to the IP of the server (say 192.168.0.80).
Output
Server Side
Waiting for call...
I got a connection from ('127.0.0.1', 55171)
RECEIVED from client: Hello!
RECEIVED from client: I am client 1
RECEIVED from client: Do you see me?
RECEIVED from client: Bye
Client is closed
Waiting for call...
I got a connection from ('127.0.0.1', 55172)
RECEIVED from client: Here is client 1 again.
RECEIVED from client: Server, pls close youself.
Server is closed
Client Side
Message sent to server:Hello! Waiting for server to feed back... RECEIVED from server: Your data is Hello! Message sent to server:I am client 1 Waiting for server to feed back... RECEIVED from server: Your data is I am client 1 Message sent to server:Do you see me? Waiting for server to feed back... RECEIVED from server: Your data is Do you see me? Message sent to server:Bye Waiting for server to feed back... RECEIVED from server: Your data is Bye Message sent to server:c # Message sent to server:Here is client 1 again. Waiting for server to feed back... RECEIVED from server: Your data is Here is client 1 again. Message sent to server:Server, pls close youself. Waiting for server to feed back... RECEIVED from server: Your data is Server, pls close youself. Message sent to server:x
Reference
http://www.thefengs.com/wuchang/work/courses/cs594/PyNet.pdf
No comments:
Post a Comment