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实现网络编程——Socket -> 正文阅读

[网络协议]Python实现网络编程——Socket

目录

导入Socket模块

Udp套接字的使用

?Tcp套接字的使用

Tcp客户端

Tcp服务器

发送与接受的两个方法

发送(sendto()/?send())

接受(recvfrom()/?recv())


导入Socket模块

要使用socket实现网络编程,首先要导入socket模块

import socket

然后创建一个socket套接字,常用的socket套接字分为udp与tcp

使用套接字发送和接收消息各有两个方法,在文章末尾会讲解其区别

Udp套接字的使用

?创建udp套接字

"""
创建一个udp类型的socket套接字,AF_INET表示网络类型为IPv4,要使用IPv6将参数改为AF_INET6
SOCKET_DGRAM表示使用udp套接字
"""
udp_socket = socket.socket(socket.AF_INET, SOCKET_DGRAM)

创建完后就可以使用该套接字进行收发信息

# 使用udp套接字发送信息
send_data = input("请输入要发送的内容:")
"""
udp_socket.snedto(发送内容, ("本机ip", port))
发送内容应为字节类型,所以需要进行编码,编码类型看使用系统,一般为utf-8,但windows系统为gbk
ip与port要放在一个元组里面,不然会报错
"""
udp_socket.snedto(sned_data.encode("gbk"), ("127.0.0.1", 6606))
# 接收消息前需要先绑定端口,元组里第一个参数可不写,表示本机ip
udp_socket.bind(("", 9532))

"""
使用udp套接字接收消息,参数代表可接受的最大字节数
返回两个值,第一个为接收的消息,第二个为发送方地址
"""
recv_data = udp_socket.recvfrom(1024)

recv_msg = recv_data[0]
recv_addr = recv_data[1]

# 接收到的消息为字节类型,需要对其进行解码
print(recv_msg.decode("gbk"))

使用完毕后关闭udp套接字

udp_socket.close()

?Tcp套接字的使用

创建tcp套接字,tcp套接字可作为客户端与服务器

一般来说客户端先发送消息,后发送消息;服务器反之

# SOCK_STREAM表示创建tcp套接字
tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_sever = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Tcp客户端

# 使用客户端时需要先链接服务器, tcp_client.connect(("服务器ip", 服务器port))
tcp_client.connect(("127.0.0.1", 8621))

# 使用tcp客户端发送信息
sned_data = input("请输入要发送的内容:")
tcp_client.send(send_data.encode("gbk"))
# 使用tcp客户端接收消息,只返回一个值,即接收的消息
recv_msg = tcp_client.recv(1024)

print(recv_msg.decode("gbk"))

使用完毕后关闭tcp套接字

udp_client.close()

Tcp服务器

# 将tcp套接字设置为服务器
# 绑定地址
tcp_sever.bind(("", 8621))

# 1.设置为监听(被动)套接字,参数可简单理解为可以同时有多少个客户端接入
tcp_sever.listen(128)

# 2.等待客户端的链接
# 返回两个值,一个为新的tcp套接字,一个为客户端地址,为客户端服务的为新的tcp套接字
new_tcp_sever, client_addr = tcp_sever.accept()

# 3.接收客户端发送的请求
new_tcp_sever.recv(1024)

# 4.回送消息给客户端,可不写
new_tcp_sever.send("Respect".encode("gbk"))
# 关闭套接字要先关闭新的tcp套接字,再关闭监听套接字
new_tcp_sever.close()
tcp_sever.close()

发送与接受的两个方法

发送(sendto()/?send())

sendto(): 接受两个参数,第一个为发送的消息,第二个为目标地址("ip", port)

send(): 接受一个参数,为发送的消息

接受(recvfrom()/?recv())

recvfrom(): 返回两个参数,第一个为接受的消息,第二个为发送方的地址("ip", port)

recv(): 返回一个参数,为接受的数据

我个人认为一般sendto()与recvfrom()在tcp中使用,因为需要知道地址才可接受和发送消息;

而send()与recv()一般在tcp里面使用,因为客户端与服务器间有链接关系,地址已经不需要传递。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:49:47  更:2021-08-31 15:50:11 
 
开发: 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年11日历 -2024/11/25 22:55:11-

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