Python实现网络编程——Socket

本文介绍了Python中如何使用socket模块进行网络编程,包括UDP和TCP套接字的创建、发送与接收消息的方法。通过示例展示了UDP套接字的双向通信及TCP套接字的客户端和服务器端应用。强调了sendto()和recvfrom()通常在TCP中使用,而send()和recv()适用于已建立连接的TCP通信。
摘要由CSDN通过智能技术生成

目录

导入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里面使用,因为客户端与服务器间有链接关系,地址已经不需要传递。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值