Python篇之网络编程,实现简单的服务端和客户端的内容传输

本小节内容:实现简单的信息交流


一、 Socket介绍

socket (简称 套接字) 模块是其内置的标准库之一,它实现了BSD sockets API,允许开发者在Python程序中进行网络通信。Python的socket模块为开发者提供了丰富的API,使得编写网络客户端和服务器变得相对简单,无论是构建简单的聊天应用、Web服务器还是其他网络应用程序都离不开它的支持

在这里插入图片描述

二、客户端与服务端

Socket服务端:等待其它进程的连接、可接受发来的消息、可以回复消息
Socket客户端:主动连接服务端、可以发送消息、可以接收回复

在这里插入图片描述

三、在python中实现网络通信

首先在pycharm中新建两个模块,分别是客户端socket和服务端socket

在这里插入图片描述

1. 服务端

语法:

1.创建socket对象
import socket
socket_server=socket.socket()

2.绑定socket_server到指定IP和地址,这里是以二元元组的形式填写
socket_server.bind(host,port) 

3. 服务端开始监听端口  backlog为int类型,表示允许接受数量,可填可不填
socket_server.listen(backlog)

4. 接受客户端连接,获得连接对象 注意:应先链接成功后才能输出,如未链接成功则卡在此步
conn,address=socket_server.accept()
print(f"接收到客户端连接,连接来自:{address}")

5.客户端连接后,通过recv方法,接收客户端发送的消息
while True:
	# 两种编码类型相互转换 recv方法的传参是buffsize,缓冲区大小一般设置为1024
	data = conn.recv(1024).decode("Utf-8")
    if data == 'exit':
		break
	print("接收到发送来的数据:",data)

6. 关闭连接
conn.close()
socket_server.close()

案例:

import socket
socket_server=socket.socket()
socket_server.bind(("localhost",8888))
socket_server.listen(1)
# accpet方法返回的是二元元组(链接对象,客户端地址信息)

conn,address=socket_server.accept()

print(f"接收到了客户端的链接,客户端的信息是:{address}")
# 利用循环无限的与客户端的交流
while True:
    data: str = conn.recv(1024).decode("UTF-8")
    print(f"客户端发来的消息是:{data}")
    msg = input("请输入你要和客户端回复的信息:")
    if msg == 'exit':
        break
    conn.send(msg.encode("UTF-8"))
# 关闭链接
conn.close()
socket_server.close()

2. 客户端

语法:

1.创建socket对象
import socket
socket_server=socket.socket()

2. 连接到服务端 这里使用的是connect方法
socket_client.connect(host,port) 

3.发送信息
while True:
    msg=input("请输入要给服务发送的消息:")
    if msg == 'exit':
        break
    # 接收的信息相互转换(字节和UTF-8格式转换)
    socket_client.send(msg.encode("UTF-8"))
4.接收服务端信息    
    recv_data=socket_client.recv(1024)
    print(f"服务端回复的信息是:{recv_data.decode('UTF-8')}")

5. 关闭链接
socket_client.close()

案例:

import socket
# 创建对象
socket_client=socket.socket()
# 链接服务端使用connect
socket_client.connect(("localhost",8888))

# 使用循环
while True:
    msg=input("请输入要给服务发送的消息:")
    if msg == 'exit':
        break
    # 接收的信息相互转换(字节和UTF-8格式转换)
    socket_client.send(msg.encode("UTF-8"))
    recv_data=socket_client.recv(1024)
    print(f"服务端回复的信息是:{recv_data.decode('UTF-8')}")

# 关闭链接
socket_client.close()

3. 连接测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔落难起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值