Python网络编程之Socket的简单实现
2018-07-27 06:29:10来源:博客园 阅读 ()
一、引入
关于Python的网络编程,最基础莫过于socket了。
socket,又称“套接字”,网络上的两个程序如果想要实现双向的数据通信,需要建立连接,这个连接的一端就称为一个socket。
python中有一个模块socket,在这个模块中可以找到socket()函数,该函数用于创建套接字对象。根据所用协议的不同(TCP/IP和UDP/IP),可以创建两类socket。下面贴上一个TCP/IP类的socket实例。
二、创建TCP服务器
1 __author__ = "JentZhang" 2 3 from socket import * 4 from time import ctime 5 6 HOST = '127.0.0.1' #服务器地址 7 PORT = 21136 #服务器端口 8 BUFIZE = 1024 #接受数据的大小 9 ADDR = (HOST, PORT) #创建socket时用到的地址(就是将服务器地址和端口写成一个元组的形式) 10 11 tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建socket连接(AF_INET表示IPV4,SOCK_STREMAM表示TCP协议 ) 12 tcpSerSock.bind(ADDR) #绑定地址 13 tcpSerSock.listen(5) #开始监听端口,参数5表示可以接收的连接数量 14 15 while True: #循环接受多个客户端发来的请求 16 try: 17 print('Watting for connection...') 18 tcpCliSock, addr = tcpSerSock.accept() #当有客户端发来请求时,通过accept()方法来接受,返回参数有两个,可以自行print出来,看看是什么 19 print('...connected from :', addr) 20 21 while True: #循环接受客户端发来的消息 22 data = tcpCliSock.recv(BUFIZE) #接受客户端发来的消息,接收到的是一个byte类型的数据 23 if not data: #当用户发送空字符串的是时候,跳出循环,重新接收数据 24 break 25 print('接收到数据:', data) 26 tcpCliSock.send(b'[%s] % s' % (ctime().encode(), data)) #将接收到的数据加上时间戳返回回去,同样返回的数据需要是byte类型 27 except ConnectionResetError as e: #当客户端关闭连接时,catch这个错误做出相应的提示 28 print(e) 29 print('%s:%s 退出了' % (addr[0], addr[1])) #服务端也关闭相关的socket连接 30 finally: 31 tcpCliSock.close() 32 tcpSerSock.close()
三、创建客户端
1 __author__ = "JentZhang" 2 3 from socket import * 4 5 HOST = '127.0.0.1' 6 PORT = 21136 7 BUFSIZE = 1024 8 ADDR = (HOST, PORT) 9 10 tcpCliSock = socket() 11 tcpCliSock.connect(ADDR) #建立连接 12 13 while True: 14 msg = input('>>') #输入要发送的内容 15 if not msg: #如果发送内容为空,则重新发送 16 break 17 tcpCliSock.send(msg.encode()) #发送byte类型的数据 18 19 data = tcpCliSock.recv(BUFSIZE) #接受服务端的返回 20 if not data: #如果服务端返回为空,则重新发送 21 break 22 23 print(data.decode()) 24 tcpCliSock.close()
四、效果预览
1.分别启动服务端和客户端,注意先启动服务端。
2.发送数据
3.断开连接
五、总结概括
简单的做了一个socket的实例(由于socket的阻塞模式,本实例同一时间只能一个客户端连到服务器,只有当当前连接的客户端断开了连接,其他客户端才能连进来)。
关于socket编程,还有更丰富的东西在里面。本例仅供参考。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash