视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Pythonsocket网络编程TCP/IP服务器与客户端通信
2020-11-27 14:26:32 责编:小采
文档

Python socket网络编程

初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深入很多,自己看来也是一知半解,刚好看到了这部分网络编程,依然有好多不太理解的地方,不过想来通过自己不断的摸索,不断地搜寻资料学习,早晚应该会变得通透吧.......

这部分主要使用的模块就是 socket 模块,在这个模块中可以找到 socket()函数,该函数用于创建套接字对象,套接字也有自己的方法集,这些方法可以实现基于套接字的网络通信。

socket()模块函数

要创建套接字,必须使用 socket.socket()函数,他一般的语法如下

socket(socket_family, socket_type, protocol=0)

其中socket_family是 AF_UNIX或 AF_INET,socket_type 是 SOCK_STREAM 或 SOCK_DGRAM,protocol 通常省略,默认=0.

所以创建 TCP/IP 套接字,可以使用下面的方式调用 socket.socket().

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

同样创建 UDP/IP 套接字,使用下面的方法调用

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

创建 TCP 服务器

创建 TCP 服务器的流程基本如下,并非正真正的代码

ss = socket() #创建服务器套接字
 ss.bind() #套接字与地址绑定
 ss.listen() #监听连接
 inf_loop: #服务器无限循环
 cs = ss.accepr() #接受客户端连接
 comm_loop: #通信循环
 cs.recv()/cs.send() #对话(接收/发送)
 cs.close() #关闭客户端套接字
 ss.close() #关闭服务器套接字(可选)

实际中创建 TCP 服务器基本流程就如上边所说,可能稍有不同但基本思路应该是相通的,下边是真正穿件服务器的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import * #将 socket 属性引入到命名空间

HOST = '' #这是对 bind()方法的标识表示可以使用任何可用的地址
PORT = 21571 #端口号
BUFSIZ = 1024 #缓冲区大小,1kb
ADDR = (HOST,PORT) #地址????

tcpSerSocket = socket(AF_INET,SOCK_STREAM) #创建 tcp 套接字
tcpSerSocket.bind(ADDR) #将地址绑定到套接字上
tcpSerSocket.listen(5) #设置并启动套接字监听

while True: #无限循环,等待客户端连接
 print('waiting for connection...') 
 tcpCliSocket,addr = tcpSerSocket.accept() #被动接受客户端连接 
 print('...connected from:',addr)

 while True: #对话循环,等待客户端发送消息
 data = tcpCliSocket.recv(BUFSIZ) #接收客户端消息
 if not data: #如果消息是空白,跳出对话循环,关闭当前连接
 break
 tcpCliSocket.send(data) #如果收到消息,将消息原封不动返回客户端

 tcpCliSocket.close()
tcpSerSocket.close()

创建 TCP 客户端

同上边一样,一个简单的非代码流程

cs = socket() #创建客户端套接字
 cs.connect() #尝试连接服务器
 comm_loop: #通信循环
 cs.send()/cs.recv() #对话(发送/接收)
 cs.close() #关闭客户端套接字

实际中创建客户端也是翻译上边的步骤

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *

HOST = 'localhost' #服务器的主机名
PORT = 21571 #端口号
BUFSIZ = 1024 #缓冲区
ADDR = (HOST,PORT) #地址

tcpCliSocket = socket(AF_INET,SOCK_STREAM) #创建客户端套接字
tcpCliSocket.connect(ADDR) #连接服务器

while True: #通信循环
 data = input('> ') #客户端输入信息
 if not data: #如果输入信息为空,则跳出循环,关闭通信
 break

 data = str.encode(data) 
 tcpCliSocket.send(data) #发送客户端信息
 data = tcpCliSocket.recv(BUFSIZ) #接受服务器返回信息
 if not data: #如果服务器未返回信息,关闭通信循环
 break
 print('get:',data.decode('utf-8'))

tcpCliSocket.close()

当然,这只是最基础的通信,而且关于主机名,端口号之类的东西暂时还不是很懂,目前所做的只是在同一台电脑上通信,端口号也需要一致,如果不同的电脑进行通信该怎么做?我还只是个小白.....

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多Python socket网络编程TCP/IP服务器与客户端通信相关文章请关注PHP中文网!

下载本文
显示全文
专题