标签:
经过上回简单地介绍,大家对服务器多少应该清楚一些了吧!还记得TCP: (Transmission Control Protocol)
传输控制协议? 还记得IP: (Internet Protocol)因特网协议, IPv4, IPv6? 如有不清楚,还请回去补充下概念......
传送门: http://www.cnblogs.com/Ruby517/p/5808224.html
参考: 《Python核心编程(3rd)》 P51 ~ P57
-----------------------------------------------------------------------------------------------------------------
名称 描述
服务器套接字方法
s.bind() 将地址(主机名,端口号对)绑定到套接字上
s.listen() 设置并启动TCP监听器
s.accept() 被动接受TCP客户端连接,一直等待直到连接到达(阻塞)
客户端套接字方法
s.connect() 主动发起TCP服务器连接
普通的套接字方法
s.recv() 接收TCP消息
s.send() 发送TCP消息
创建TCP服务器
TCP是控制面向连接的套接字的协议,通常和IP一起用,搭建这样一个类型的服务器有何妙用呢?其实我也不知道!
下面是创建TCP服务器的一般伪代码(就是掺杂了很多中文的代码), 由于只是个框架,所以直接按执行只会报错 !
1 # coding: utf-8 2 3 from socket import * # 导入socket模块的所有特性 4 5 ss = socket() # ss: (server socket)服务器表接字,创接服务器表接字 6 ss.bind() # 套接字与本地地址绑定 7 ss.listen() # 开启TCP监听器 8 9 while True: # 服务器无限循环 10 cs = ss.accept() # cs: (client-side)客户端, 被动接受客户端连接 11 while True: # 通信循环 12 cs.recv()/cs.send() # 对话 (接收/发送) 13 cs.close() # 关闭客户端套接字 14 ss.close() # 关闭服务器套接字
TCP时间戳服务器
【时间戳指的是ctime()输出的内容】
1 # coding: utf-8 2 3 from socket import * 4 5 # Host: 主机, Host变量是空白的,表示它可以使用任何可用的地址 6 # Port: 端口, 端口号范围为0~65535 (尽管小于1024的端口号都预留给了系统) 7 # Buffer Size: 缓冲区大小, 这里设置为1024B, 即1KB 8 # listen()方法/函数的参数是在连接被转接或拒绝之前,请求的最多次数 9 10 Host = "" 11 Port = 21568 12 Bufsiz = 1024 13 Addr = (Host, Port) 14 15 tcpSerSock = socket(AF_INET, SOCK_STREAM) 16 tcpSerSock.bind(Addr) 17 tcpSerSock.listen(5) 18 19 while True: 20 print "Waiting for connection..." 21 tcpCliSock, addr = tcpSerSock.accept() 22 print "...Connected from: %s" % addr 23 24 while True: 25 data = tcpCliSock.recv(Bufsiz) 26 # 如果data是空白值,那么它的布尔值即为假,not data即为真,那么执行break语句,跳出循环 27 if not data: 28 break 29 # ctime()表示当前的系统时间,即时间戳 30 tcpCliSock.send("[%s] %s" % (ctime(), data)) 31 # 关闭客户端套接字 32 tcpCliSock.close() 33 34 tcpSerSock.close()
一旦进入到服务器的无限循环中,我们就只有被动等待客户端地连接。当一个连接请求出现时,我们进入到对话循环中
(第二个while语句),在该循环中等待客户端发送的信息。如果信息是空白的,这意味着客户端已经退出, 所以此时将
跳出对话循环,关闭当前客户端连接,然后等待另一个客户端连接(只退出第二个while对话循环,第一个服务器循环还
在运行)!
注意,如果出现这种报错,说明port: 端口号已经被其他程序占用,也许你已经打开过的服务器没有关掉就又新
打开一个了! 此时关掉开着的服务器或者换一个端口号就行了。(有效的端口号范围是0~65535,小于1024的
端口号预留给了系统!)
单独运行服务器的话,由于此时尚没有客户端的请求,服务器输出的只有:
----------------------------------------------------------------------------------------------------------------
标签:
原文地址:http://www.cnblogs.com/Ruby517/p/5811714.html