网络通信也就是说需要两个或多个设备,分为server端(服务端)与client端(客户端)
简单的通信:
对于服务端来说,需要接收消息
首先要确定与谁通信,即确定IP地址与端口号
IP = '127.0.0.1'
# 端口号
PORT = 9999
# 定义一次从socket缓冲区最多读入512个字节
BUFLEN = 512
然后使用TCP协议
# 实例化一个socket对象
# 调用socket中的socket()来创建一个listenSocket,主要用户进行监听
# socket()有两个参数
# 第一个参数AF_INET表示socket网络层使用IP协议
# 第二参数SOCK_STREAM表示该socket传输层使用tcp协议
listenSocket = socket(AF_INET, SOCK_STREAM)
接着对IP地址与端口号进行绑定
# bind()函数将我们创建的这个socket关联到我们主机的某一个网卡(网络接口,network interface)和端口上
# socket绑定地址和端口
listenSocket.bind((IP, PORT))
等待连接(如果没有客户端连接的话,程序会一直停在accept函数的这一行,直至有客户端与其连接)
# 使socket处于监听状态,等待客户端的连接请求
# 参数5表示最多接受多少个等待连接的客户端
listenSocket.listen(5)
print(f'服务器端启动成功,在{PORT}端口等客户端的连接.....')
dataSocket, addr = listenSocket.accept()
print('接受一个客户端连接:', addr)
关闭
# 服务端也调用close(),关闭socket
dataSocket.close()
listenSocket.close()
如果有客户端连接,则接收信息
while True:
# 尝试读取对方发送的消息
# BUFFEN指定从接受收缓存里最多读取多少字节
recved = dataSocket.recv(BUFLEN)
# 如果返回空bytes,表示对方关闭了连接
# 退出循环,结束消息收发
if not recved:
break
# 读取的字节数据是bytes 类型,需要解码为字符串
info = recved.decode()
print(f'收到对方信息: {info}')
# 发送的数据类型必须为bytes,所以要编码
dataSocket.send(f'服务端收到了信息 {info}'.encode())
完整代码:
# 导入socket库
# import socket
from socket import *
# 主机地址为0.0.0.0,表示绑定本机所有网络接口IP地址
# 等待客户端来连接
IP = '127.0.0.1'
# 端口号
PORT = 9999
# 定义一次从socket缓冲区最多读入512个字节
BUFLEN = 512
# 实例化一个socket对象
# 调用socket中的socket()来创建一个listenSocket,主要用户进行监听
# socket()有两个参数
# 第一个参数AF_INET表示socket网络层使用IP协议
# 第二参数SOCK_STREAM表示该socket传输层使用tcp协议
listenSocket = socket(AF_INET, SOCK_STREAM)
# bind()函数将我们创建的这个socket关联到我们主机的某一个网卡(网络接口,network interface)和端口上
# socket绑定地址和端口
listenSocket.bind((IP, PORT))
# 使socket处于监听状态,等待客户端的连接请求
# 参数5表示最多接受多少个等待连接的客户端
listenSocket.listen(5)
print(f'服务器端启动成功,在{PORT}端口等客户端的连接.....')
dataSocket, addr = listenSocket.accept()
print('接受一个客户端连接:', addr)
while True:
# 尝试读取对方发送的消息
# BUFFEN指定从接受收缓存里最多读取多少字节
recved = dataSocket.recv(BUFLEN)
# 如果返回空bytes,表示对方关闭了连接
# 退出循环,结束消息收发
if not recved:
break
# 读取的字节数据是bytes 类型,需要解码为字符串
info = recved.decode()
print(f'收到对方信息: {info}')
# 发送的数据类型必须为bytes,所以要编码
dataSocket.send(f'服务端收到了信息 {info}'.encode())
# 服务端也调用close(),关闭socket
dataSocket.close()
listenSocket.close()
对于客户端来说,需要发送消息
定义IP地址与端口,与服务端一致
IP='127.0.0.1'
SERVER_PORT=9999
BUFLEN=512
实例化对象
# 实例化一个sokcet对象,指明协议
dataSocket = socket(AF_INET,SOCK_STREAM)
调用对象中的connect方法,尝试连接服务端
# 连接服务端socket
dataSocket.connect((IP,SERVER_PORT))
如果连接成功,则
while True:
# 从终端读入用户输入的字符串
toSend = input('>>> ')
if toSend =='exit':
break
dataSocket.send(toSend.encode())
recved = dataSocket.recv(BUFLEN)
#如果返回空bytes,表示对方关闭了连接
if not recved:
break
# 打印读取的信息
print(recved.decode())
关闭
dataSocket.close()
完整代码:
from socket import *
IP='127.0.0.1'
SERVER_PORT=9999
BUFLEN=512
# 实例化一个sokcet对象,指明协议
dataSocket = socket(AF_INET,SOCK_STREAM)
# 连接服务端socket
dataSocket.connect((IP,SERVER_PORT))
while True:
# 从终端读入用户输入的字符串
toSend = input('>>> ')
if toSend =='exit':
break
dataSocket.send(toSend.encode())
recved = dataSocket.recv(BUFLEN)
#如果返回空bytes,表示对方关闭了连接
if not recved:
break
# 打印读取的信息
print(recved.decode())
dataSocket.close()
版权声明:本文为JYHZZ原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。