Difference between revisions of "Socket Programming in Python"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) |
PeterHarding (talk | contribs) |
||
| Line 91: | Line 91: | ||
<pre> | <pre> | ||
</pre> | </pre> | ||
==Matched Pair== | |||
===Reader=== | |||
<pre> | |||
# Echo server program | |||
import socket | |||
HOST = '' # Symbolic name meaning the local host | |||
PORT = 11001 # Arbitrary non-privileged port | |||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |||
s.bind((HOST, PORT)) | |||
s.listen(1) | |||
conn, addr = s.accept() | |||
print 'Connected by', addr | |||
while 1: | |||
data = conn.recv(1024) | |||
if not data: break | |||
conn.send(data) | |||
conn.close() | |||
</pre> | |||
===Client=== | |||
<pre> | |||
# Echo client program | |||
import socket | |||
HOST = 'xxx.com.au' # The remote host | |||
PORT = 11001 # The same port as used by the server | |||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |||
s.connect((HOST, PORT)) | |||
s.send('Hello, world') | |||
data = s.recv(1024) | |||
s.close() | |||
print 'Received', repr(data) | |||
</pre> | |||
[[Category:Python]] | [[Category:Python]] | ||
[[Category:Network]] | [[Category:Network]] | ||
[[Category:Socket]] | [[Category:Socket]] | ||
Revision as of 16:26, 31 August 2008
References
Examples
Client
#!/usr/bin/env python
# Create an INET, STREAMing socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#now connect to the web server on port 80 - the normal http port
s.connect(("www.performiq.com.au", 80))
Simple HTTP Server
#!/usr/bin/env python # Create an INET, STREAMing socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Bind the socket to a public host ip, and a well-known port serversocket.bind((socket.gethostname(), 80)) # Become a server socket serversocket.listen(5) while True: # Accept connections from outside (clientsocket, address) = serversocket.accept() # Now do something with the clientsocket - # say, pretend this is a threaded server ct = client_thread(clientsocket) ct.run()
Socket Comm Class
Fixed Length
class socket_comm:
'''demonstration class only
- coded for clarity, not efficiency
'''
MSGLEN = 64
def __init__(self, sock=None):
if sock is None:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
else:
self.sock = sock
def connect(host, port):
self.sock.connect((host, port))
def send(msg):
totalsent = 0
while totalsent < self.MSGLEN:
sent = self.sock.send(msg[totalsent:])
if sent == 0:
raise RuntimeError, "Socket connection failed..."
totalsent += sent
def recv():
msg = ''
while len(msg) < self.MSGLEN:
chunk = self.sock.recv(self.MSGLEN-len(msg))
if chunk == '':
raise RuntimeError, "Socket connection failed..."
msg += chunk
return msg
Variable Length
Matched Pair
Reader
# Echo server program
import socket
HOST = '' # Symbolic name meaning the local host
PORT = 11001 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.send(data)
conn.close()
Client
# Echo client program
import socket
HOST = 'xxx.com.au' # The remote host
PORT = 11001 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)