16 Sep 2015
概念:IP, PORT, DOMAIN, URL(uniform resource locator), API(application program interface)
通讯协议:tcp, udp
常用协议:http, smtp, ssh, telnet …
参考:http://blog.csdn.net/jmq_0000/article/details/7091142
文件: server.py
# coding:utf-8 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 各项参数意义: # socket.socket(family, type) # family: # - AF_INET, IPV4-Address # - AF_UNIX, Local communication # type: # - SOCK_STREAM, TCP # - SOCK_DGRAM, UDP # - SOCK_RAW, 原始数据包 host = '127.0.0.1' port = 8881 s.bind((host, port)) # 对于ipv4 socket,bind函数接受一个ip地址和端口组成的tuple print (host, port) s.listen(5) # socket.socket.listen([backlog]) # backlog用来限定同时处理的连接 # backlog最小是0,如果传入的值小于0,则修正为0 while True: print 'wait' c, addr = s.accept() # socket.socket.accept()返回(socket object, address info) # 对于ipv4的socket连接,address info为ip地址和端口的tuple print 'Got connection from', addr c.send('Thank you for connecting') c.close()
文件: client.py
# coding:utf-8 import socket s = socket.socket() host = '127.0.0.1' port = 8881 s.connect((host, port)) print s.recv(1024) # recv(bufsize[, flags]) # bufsize指定了一次可以传输数据的最大数量
文件: simple_webserver.py
# coding:utf-8 import sys import socket HOST = '127.0.0.1' PORT = 10001 CONTENT = """ HTTP/1.1 200 OK Server: huyang/1.0 Content-Type: text/html; charset=utf-8 Content-Length: 1000 <html> <head> <title>hello socket programming</title> </head> <body> I'm Body </body> </html> """ def main(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(10) while 1: try: conn, addr = s.accept() except KeyboardInterrupt: conn.close() s.close() sys.exit() print 'Connected by', addr data = conn.recv(1024) if not data: break print data conn.send(CONTENT) conn.close() s.close() if __name__ == "__main__": main()
和c/s端的主要区别就是返回的内容CONTENT中增加了http的header
# coding:utf-8 from SocketServer import TCPServer, StreamRequestHandler class Handler(StreamRequestHandler): def handle(self): addr = self.request.getpeername() print 'connection from', addr self.wfile.write('Hi, Everyone') server = TCPServer(('', 10002), Handler) server.serve_forever()
urllib vs urllib2
# coding:utf-8 import urllib page = urllib.urlopen('http://m.sohu.com') print page.read()
url介绍:
推荐:requests
三种:
使用SocketServer提供的Fork, Thread机制。
http server:
Python提供多进程的包multiprocessing,可以像写线程一样写多进程代码。
推荐书籍《Python网络编程基础》
代码:https://coding.net/u/the5fire/p/PyCode/git/tree/webserver/21