IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Python网络编程之TCP编程 -> 正文阅读

[系统运维]Python网络编程之TCP编程


一、前言

??由于TCP连接具有安全可靠的特性,所以TCP应用更为广泛。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的服务叫服务器。例如,当我们在浏览器中访问百度时,我们自己的计算机就是客户端,浏览器会主动向百度的服务器发起连接。如果一切顺利,百度的服务器接受我们的连接,一个TCP连接就建立起来了,后面的通信就是发送网页内容了。


二、创建TCP服务器

??创建TCP服务器的过程,类似于生活中接听电话的过程。如果要接听别人的来电,首先需要购买一部手机,然后安装手机卡。接下来,设置手机为接听状态,最后静等对方来电。

??如同上面的接听电话的过程一样,在程序中,如果想要完成一个TCP服务器的功能,需要的流程如下:

  • 使用socket()创建一个套接字
  • 使用bind()绑定IP和port
  • 使用listen()使套接字变为可被动连接
  • 使用accept()接收发送数据
  • 使用recv/send()接收发送数据

??例如,使用socket模块,通过客户端浏览器向本地服务器(IP地址为127.0.0.1)发起请求,服务器接到请求,向浏览器发送“Hello World”。具体代码如下:

# -*- coding: utf-8 -*-
import socket  # 导入socket模块

host = "127.0.0.1"  # 主机IP
port = 8080  # 端口号
web = socket.socket()  # 创建socket对象
web.bind((host, port))  # 绑定端口
web.listen(5)  # 设置最多连接数
print("服务器等待客户端连接……")
# 开启死循环
while True:
    conn, addr = web.accept()  # 创建客户端连接
    data = conn.recv(1024)  # 获取客户端请求数
    print(data)  # 打印接收到的数据
    conn.sendall(b"HTTP/1.1 200 OK\r\n\r\nHello World")  # 向客户端发送数据
    conn.close()  # 关闭连接

??运行结果如下图所示:

在这里插入图片描述

??然后打开谷歌浏览器,输入网址:127.0.0.1:8080(服务器的地址:127.0.0.1,端口号是8080),成功连接服务器以后,浏览器显示“Hello World”。如下图所示:

在这里插入图片描述


三、创建TCP客户端

??TCP的客户端要比服务器简单很多,如果说服务器是需要自己买手机、查手机卡、设置铃声、等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多。

??在实例1中,我们使用浏览器作为客户端接收数据,下面,创建一个tcp客户端,通过该客户端向服务器发送和接收消息。创建一个client.py文件,具体代码如下:

# -*- coding: utf-8 -*-
import socket  # 导入socket模块

s = socket.socket()  # 创建TCP/IP套接字
host = "127.0.0.1"  # 获取主机地址
port = 8080  # 设置端口号
s.connect((host, port))  # 主动初始化TCP服务连接
send_data = input("请输入要发送的数据:")  # 提示用户输入数据
s.send(send_data.encode())  # 发送TCP数据
# 接收对方发送过来的数据,最大接收1024个字节
recvData = s.recv(1024).decode()
print("接收到的数据为:", recvData)
# 关闭套接字
s.close()

??先运行实例1中的server.py文件,然后运行client.py文件。接着,在client.py窗口输入“hi”,此时server.py窗口会接到消息,并且发送“Hello World”。运行结果如图所示:
server.py运行结果
在这里插入图片描述


四、执行TCP服务器和客户端

??在上面的例子中,我们设置了一个服务器和客户端,并且实现了客户端和服务器之间的通信。根据服务器和客户端的执行流程,可以总结出TCP客户端和服务器的通信模型,如图所示:
在这里插入图片描述
??既然客户端和服务器可以使用Socket进行通信,那么,客户端就可以向服务器发送文字,服务器接收到消息后,显示消息内容并且输入文字返回给客户端。客户接收到响应,显示该文字,然后继续向服务器发送消息。这样,就可以实现一个简易的聊天窗口。当有一方输入“byebye”时,则退出系统,中断聊天。

??(1)创建server.py文件,作为服务器程序,具体代码如下:

# -*- coding: utf-8 -*-
import socket  # 导入socket模块

host = socket.gethostname()  # 获取主机地址
port = 12345  # 设置端口号
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建TCP/IP套接字
s.bind((host, port))  # 绑定地址(host, port)到套接字
s.listen(1)  # 设置最多连接数
sock, addr = s.accept()  # 被动接收TCP客户端连接
print("连接已建立")
info = sock.recv(1024).decode()  # 接收客户端数据
while info != "byebye":  # 判断是否退出
    if info:
        print("接收到的内容:" + info)
    send_data = input("输入发送内容:")  # 发送消息
    sock.send(send_data.encode())  # 发送TCP数据
    if send_data == "byebye":  # 如果发送byebye,则退出
        break
    info = sock.recv(1024).decode()  # 接收客户端数据
sock.close()  # 关闭客户端套接字
s.close()  # 关闭服务器套接字

??(2)创建client文件,作为客户端程序,具体代码如下:

# -*- coding: utf-8 -*-
import socket  # 导入socket模块

s = socket.socket()  # 创建TCP/IP套接字
host = socket.gethostname()  # 获取主机地址
port = 12345
s.connect((host, port))  # 设置端口号
print("已连接")  # 主动初始化TCP服务器连接
info = ""
while info != "beybey":  # 判断是否退出
    send_data = input("输入发送内容:")  # 输入内容
    s.send(send_data.encode())
    if send_data == "beybey":
        break
    info = s.recv(1024).decode()  # 接收服务器数据
    print("接收到的内容:" + info)
s.close()  # 关闭套接字

??分别运行server.py和client.py文件,如图所示

在这里插入图片描述
在这里插入图片描述
??接下来,在client窗口,输入“菜鸡菜鸡,我是菜鸟”,然后按下《Enter》键,此时将显示client.py窗口发送消息,并提示server.py窗口输入内容,如图所示:
在这里插入图片描述
在这里插入图片描述
??当输入“byebye”时,结束对话,如图所示:
在这里插入图片描述
在这里插入图片描述


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:40:15  更:2022-08-19 19:41:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 17:39:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码