02 python网络应用实战(二)tcp客户端代码实现

一、程序架构

 B/S 浏览器/服务器模式,通过浏览器使用服务

C/S 客户端/服务器模式  ,下载软件,通过软件去使用服务

二、客户端流程

服务端:socket---bind---listen---while(1){---accept---recv---send---close---}---close

客户端:socket-----------------------------------connect---send---recv-----------------close

02 python网络应用实战(二)tcp客户端代码实现_第1张图片

 本次,先编写客户端的

02 python网络应用实战(二)tcp客户端代码实现_第2张图片

如图所示,客户端的就是5步骤

首先  python 中先要使用 socket,必须导入 socket 模块

  • 1 创建对象 socket.socket()
  • 2 建立连接 socket对象.connect()
  • 3 发送信息 socket对象send()
  • 4 接受信息 socket对象.redv()
  • 5 关闭连接 socket对象.close()

三、网络调试助手(暂时代替服务器)

下载好 deb  包 ,使用 winscp 传输到 ubuntu

winscp如果连接一直拒绝,应该是 ubuntu没有配置ssh

sudo apt-get install ssh

sudo vim /etc/ssh/sshd_config

加一行 PermitRootLogin yes

然后重启ssh  sudo service ssh restart

再在winscp重连接就行

02 python网络应用实战(二)tcp客户端代码实现_第3张图片

 安装

sudo dpkg -i mNetAssist-release-amd64.deb

02 python网络应用实战(二)tcp客户端代码实现_第4张图片

 02 python网络应用实战(二)tcp客户端代码实现_第5张图片

但是点击无法运行(后续解决真费时间)

cd /opt/mNetAssist

./mNetAssist

报错如下

是缺失QT4的库导致

02 python网络应用实战(二)tcp客户端代码实现_第6张图片

sudo apt-get install libqtgui4:amd64

02 python网络应用实战(二)tcp客户端代码实现_第7张图片

 显示安装不成功

此时需要更新源 换成阿里云的和清华的

sudo cp /etc/apt/sources.list /etc/apt/sources.list.b // 备份原始文件

sudo chmod 777 /etc/apt/sources.list  // 修改文件权限

sudo vi /etc/apt/sources.list // 用 vim 打开文件

增加阿里云的

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

增加清华的

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

更新

sudo apt update

然后继续下载

sudo apt install libcanberra-gtk-module
sudo add-apt-repository ppa:rock-core/qt4

sudo apt update

sudo apt-get install libqtgui4:amd64
sudo add-apt-repository ppa:linuxuprising/libpng12

sudo apt update

sudo apt install libpng12-0

这样的话就下载成功(泪目!) 

02 python网络应用实战(二)tcp客户端代码实现_第8张图片

四、bytes 和 str 之间的转换

bytes 字节,二进制,网络数据的传输都是字节传输的

str --》 bytes    str.encode(编码类型)

bytes --》 str    byte.decode(编码类型)

常用的编码类型:   gbk  和  utf-8 都是处理中文字符

        gbk:   将一个中文字符编码为 2个字节

        utf-8:   将一个中文字符编码为 3个字节

02 python网络应用实战(二)tcp客户端代码实现_第9张图片

 五、tcp客户端的实现

首先  python 中先要使用 socket,必须导入 socket 模块

import socket 

  • 1 创建对象 socket.socket()
  • 2 建立连接 socket对象.connect()
  • 3 发送信息 socket对象send()
  • 4 接受信息 socket对象.redv()
  • 5 关闭连接 socket对象.close()

代码实现

import socket

if __name__ == '__main__':
    # 1.创建 socket 对象
    #   socket.socket(ip 类型,协议)  socket.AFINET 是ipv4;socket.AFINET6 ipv6
    # socket.SOCK_STREAM 表示tcp
    client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    print('对象建立成功......')

    # 2.和服务器建立连接
    #   socket对象connect((服务器ip地址,端口号))  类型是元组
    client_socket.connect(('192.168.10.128',8080))
    print('连接建立成功......')
    #3,发送信息
    send_data = "Nihao nihao nihao 我是client".encode()
    client_socket.send(send_data)
    #4.接收对法发的信息
    # 如果对方没有发送信息,recv 函数会在此阻塞等待
    buf = client_socket.recv(4096)
    print(buf.decode())
    #5.关闭连接
    client_socket.close()

实现效果:

此时服务器没有发信息,所有客户端的recv阻塞等待 

02 python网络应用实战(二)tcp客户端代码实现_第10张图片

我们在客户端发送信息

shou dao over!

 此时的pycharm应该打印同一信息

 02 python网络应用实战(二)tcp客户端代码实现_第11张图片

 代码优化,gtk编码的也可以显示

02 python网络应用实战(二)tcp客户端代码实现_第12张图片


你可能感兴趣的:(#,2,python实战1【完】,服务器,python,人工智能,tcp/ip,linux)