博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-socket 编程
阅读量:3962 次
发布时间:2019-05-24

本文共 1725 字,大约阅读时间需要 5 分钟。

介绍

要进行socket编程,发送网络消息,我们可以使用 Python 内置的 socket 库 。

目前的socket编程,使用的最多的就是通过tcp协议进行网络通讯的。

tcp进行通讯的程序双方,分为服务端和客户端。

tcp 协议进行通讯的双方,是需要先建立一个虚拟连接的。然后双方程序才能发送业务数据信息。

建立tcp虚拟连接是通过著名的 三次握手 进行的。

具体三次握手的细节大家可以参考这篇文章

我们现在来看一个 tcp协议进行通讯的 socket 服务端程序和客户端程序。

代码

下面是tcp 服务端程序 server.py

#  === TCP 服务端程序 server.py ===# 导入socket 库from socket import *# 主机地址为空字符串,表示绑定本机所有网络接口ip地址# 等待客户端来连接IP = ''# 端口号PORT = 50000# 定义一次从socket缓冲区最多读入512个字节数据BUFLEN = 512# 实例化一个socket对象# 参数 AF_INET 表示该socket网络层使用IP协议# 参数 SOCK_STREAM 表示该socket传输层使用tcp协议listenSocket = socket(AF_INET, SOCK_STREAM)# socket绑定地址和端口listenSocket.bind((IP, PORT))# 使socket处于监听状态,等待客户端的连接请求# 参数 8 表示 最多接受多少个等待连接的客户端listenSocket.listen(8)print(f'服务端启动成功,在{PORT}端口等待客户端连接...')dataSocket, addr = listenSocket.accept()print('接受一个客户端连接:', addr)while True:    # 尝试读取对方发送的消息    # BUFLEN 指定从接收缓冲里最多读取多少字节    recved = dataSocket.recv(BUFLEN)    # 如果返回空bytes,表示对方关闭了连接    # 退出循环,结束消息收发    if not recved:        break    # 读取的字节数据是bytes类型,需要解码为字符串    info = recved.decode()    print(f'收到对方信息: {info}')    # 发送的数据类型必须是bytes,所以要编码    dataSocket.send(f'服务端接收到了信息 {info}'.encode())# 服务端也调用close()关闭socketdataSocket.close()listenSocket.close()

下面是tcp 客户端程序 client.py

#  === TCP 客户端程序 client.py ===from socket import *IP = '127.0.0.1'SERVER_PORT = 50000BUFLEN = 1024# 实例化一个socket对象,指明协议dataSocket = socket(AF_INET, SOCK_STREAM)# 连接服务端socketdataSocket.connect((IP, SERVER_PORT))while True:    # 从终端读入用户输入的字符串    toSend = input('>>> ')    if  toSend =='exit':        break    # 发送消息,也要编码为 bytes    dataSocket.send(toSend.encode())    # 等待接收服务端的消息    recved = dataSocket.recv(BUFLEN)    # 如果返回空bytes,表示对方关闭了连接    if not recved:        break    # 打印读取的信息    print(recved.decode())dataSocket.close()

效果:

在这里插入图片描述

参考文章:

转载地址:http://eyhzi.baihongyu.com/

你可能感兴趣的文章
TIME_WAIT状态的意义
查看>>
千万不要把 bool 设计成函数参数
查看>>
linux文件属性及权限详解
查看>>
Find 命令使用详解
查看>>
Ext4,Ext3的特点和区别
查看>>
Linux文件系统目录结构的详细解说(二)
查看>>
Linux umount 报 device is busy 的处理方法
查看>>
一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。
查看>>
提供机制而不是策略
查看>>
内核中断机制
查看>>
内核抢占
查看>>
编译linux内核源码 ubuntu
查看>>
epoll使用详解
查看>>
epoll
查看>>
The AnimationClip 'Walk' used by the Animation component 'Pig' must be marked as Legacy.
查看>>
《Linux内核设计与实现》- Linux的进程
查看>>
《Linux内核设计与实现》- 进程的调度
查看>>
inet_ntoa()
查看>>
POSIX消息队列mq_open问题
查看>>
两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];
查看>>