Difference between revisions of "Socket Programming in Python"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) |
PeterHarding (talk | contribs) |
||
Line 2: | Line 2: | ||
* http://www.amk.ca/python/howto/sockets/ | * http://www.amk.ca/python/howto/sockets/ | ||
* http://docs.python.org/lib/socket-example.html | |||
=Examples= | =Examples= | ||
Line 141: | Line 142: | ||
</pre> | </pre> | ||
=Usin SSL= | |||
<pre> | |||
import socket | |||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |||
s.connect(('www.verisign.com', 443)) | |||
ssl_sock = socket.ssl(s) | |||
print repr(ssl_sock.server()) | |||
print repr(ssl_sock.issuer()) | |||
# Set a simple HTTP request -- use httplib in actual code. | |||
ssl_sock.write("""GET / HTTP/1.0\r | |||
Host: www.verisign.com\r\n\r\n""") | |||
# Read a chunk of data. Will not necessarily | |||
# read all the data returned by the server. | |||
data = ssl_sock.read() | |||
# Note that you need to close the underlying socket, not the SSL object. | |||
del ssl_sock | |||
s.close() | |||
</pre> | |||
[[Category:Python]] | [[Category:Python]] | ||
[[Category:Network]] | [[Category:Network]] | ||
[[Category:Socket]] | [[Category:Socket]] |
Revision as of 16:27, 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)
Usin SSL
import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('www.verisign.com', 443)) ssl_sock = socket.ssl(s) print repr(ssl_sock.server()) print repr(ssl_sock.issuer()) # Set a simple HTTP request -- use httplib in actual code. ssl_sock.write("""GET / HTTP/1.0\r Host: www.verisign.com\r\n\r\n""") # Read a chunk of data. Will not necessarily # read all the data returned by the server. data = ssl_sock.read() # Note that you need to close the underlying socket, not the SSL object. del ssl_sock s.close()