专栏首页Devops专栏Python 实战TCP的客户端 - 胖子老板,再来一包烟

Python 实战TCP的客户端 - 胖子老板,再来一包烟

tcp客户端

什么是客户端呢?

肥仔来胖子老板店里买烟,肥仔就是客户端,胖子老板就是服务端。

client (肥仔白) -- "来包利群啦" --> server(胖子老板) client (肥仔白) <-- "给你啦" -- server(胖子老板)

作为客户端是主动访问服务端的,就跟肥仔白主动去胖子老板店铺买烟、买槟榔一样。

作为服务端是监听等待客户端来访问的,就跟胖子老板打着斗地主的游戏,等人来买东西一样。

tcp客户端构建流程 - 胖子老板来包烟

编写tcp的客户端代码,使用网络助手NetAssist作为服务端,演示tcp交互过程。

客服端代码:

[root@server01 tcp]# vim client.py 

#coding=utf-8

from socket import *

# 创建socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 服务器的地址
# '192.168.1.2'表示目的ip地址
# 8080表示目的端口
dest_addr = ('192.168.1.2', 8080)  # 注意 是元组,ip是字符串,端口是数字

# 链接服务器,进行tcp三次握手
tcp_client_socket.connect(dest_addr)

# 从键盘获取数据
send_data = input("请输入要发送的数据:")

# 发送数据到指定的服务端
tcp_client_socket.send(send_data.encode("utf-8"))

# 接收对方发送过来的数据,最大接收1024个字节
recvData = tcp_client_socket.recv(1024)
print('接收到的数据为:',recvData.decode('utf-8'))

# 关闭套接字
tcp_client_socket.close()

执行如下:

半双工通讯机制

那么下面来改进一下,设置可以循环发送数据。

tcp客户端 - 胖子老板,来包烟(循环版本)

循环版本

客户端代码: 只要将发送数据的部分设置循环即可,输入stop,则退出循环。

[root@server01 tcp]# vim client.py 

#coding=utf-8

from socket import *

# 创建socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 服务器的地址
# '192.168.1.2'表示目的ip地址
# 8080表示目的端口
dest_addr = ('192.168.1.2', 8080)  # 注意 是元组,ip是字符串,端口是数字

# 链接服务器,进行tcp三次握手
tcp_client_socket.connect(dest_addr)

while True:
    # 从键盘获取数据
    send_data = input("请输入要发送的数据:")

    # 判断输入stop,则退出客户端
    if send_data == "stop":
        break

    # 发送数据到指定的服务端
    tcp_client_socket.send(send_data.encode("utf-8"))

    # 接收对方发送过来的数据,最大接收1024个字节
    recvData = tcp_client_socket.recv(1024)
    print('接收到的数据为:',recvData.decode('utf-8'))

# 关闭套接字
tcp_client_socket.close()

执行如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 实战:文件下载功能

    客户端:请求需要下载的文件名,然后从服务端根据返回的数据,写成一个文件 服务端:根据客户端发送过来的需要下载的文件名,返回该文件的内容数据

    Devops海洋的渔夫
  • Python 实战TCP的服务端 - 胖子老板就是服务端

    client (肥仔白) -- "来包利群啦" --> server(胖子老板) client (肥仔白) <-- "给你啦" -- server(胖子老板)

    Devops海洋的渔夫
  • Python 开发Web静态服务器 - 返回固定值:胖子老板,来包槟榔

    上一个章节讲述了关于http的基本内容。那么下面使用NetAssist来模拟http访问的以及数据返回。

    Devops海洋的渔夫
  • tcp客户端socket

    skylark
  • Python 实战:文件下载功能

    客户端:请求需要下载的文件名,然后从服务端根据返回的数据,写成一个文件 服务端:根据客户端发送过来的需要下载的文件名,返回该文件的内容数据

    Devops海洋的渔夫
  • 解Bug之路-记一次调用外网服务概率性失败问题的排查

    和外部联调一直是令人困扰的问题,尤其是一些基础环境配置导致的问题。笔者在一次偶然情况下解决了一个调用外网服务概率性失败的问题。在此将排查过程发出来,希望读者遇到...

    无毁的湖光-Al
  • Python与Cisco的事儿之三

       以下代码可以实现登录网络设备后通过show cdp nei 命令查看邻居设备,然后利用拼接的方式来增加描述,最后再写进相对应的网络设备的接口。

    py3study
  • python unittest关键API说明及示例

    前言 本次就python unittest单元测试框架的一些基本的、常用的API 进行分享,以便大家后续更深入的熟悉和应用unittest。 TestCase类...

    苦叶子
  • 渗透测试_利用Burp爆破用户名与密码

    burp 全称 Burp Suite, 是用于攻击web 应用程序的集成平台。它包含了许多工具,可以抓包可以爆破也可以扫描漏洞。

    飞天小子
  • PyQt中布局管理

    布局管理是GUI编程中的一个重要方面。布局管理是一种如何在应用窗口上放置组件的一种方法。我们可以通过两种基础方式来管理布局。我们可以使用绝对定位和布局类。使用布...

    小飞侠xp

扫码关注云+社区

领取腾讯云代金券