码迷,mamicode.com
首页 > 其他好文 > 详细

【卷二】TCP服务器与客户端

时间:2016-08-26 21:14:37      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

经过上回简单地介绍,大家对服务器多少应该清楚一些了吧!还记得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的

端口号预留给了系统!)

技术分享

 

单独运行服务器的话,由于此时尚没有客户端的请求,服务器输出的只有:

技术分享

 

----------------------------------------------------------------------------------------------------------------

 

【卷二】TCP服务器与客户端

标签:

原文地址:http://www.cnblogs.com/Ruby517/p/5811714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!