Socket编程

Socket编程

对于Python而言,进行Socket编程,发送网络消息,可以使用Python内置的Socket库;目前使用最多的是利用TCP协议来进行网络通行的

利用TCP进行通信的双方,称之为服务端(severt)与客户端(client),TCP协议双方通信之前需要建立连接,然后才能进行信息的传递(三次握手)

编码流程:
"""服务器端:
		1.实例化创建Socket对象
		2.绑定本地IP地址与端口号
		3.监听
		4.模拟三次握手建立连接过程,返回通信Socket对象
		5.进行信息的接受与发送
		6.关闭连接"""

"""客户端端:
		1.实例化创建Socket对象
		2.与服务端建立连接(需要预先知道服务器端的IP地址与端口号)
		3.进行信息的发送与接受
		4.关闭连接"""
服务器端代码:
#服务端

#导入socket库
from socket import *
#定义配置参数
#本地IP地址
IP="0.0.0.0"
#本地端口号
PORT=50000
#定义一次性从SOCKET缓冲区中读取最大字节数
BUFFERMAX=512

#创建Socket对象
"""参数说明:
    参数AF_INET表明该对象网络层使用IP协议
    参数SOCK_STREAM表明该对象传输层使用TCP协议"""
listenSocket=socket(AF_INET,SOCK_STREAM)
#给当前SOCKET绑定地址和端口号
listenSocket.bind((IP,PORT))

#使socket进程处于监听状态,等待客户端的连接请求
#参数表明最多可以接受等待连接的客户端数目,如4表明当前最多可以接受4个客户端的请求
listenSocket.listen(4)
print("服务端启动成功,在端口号{PORT}等待客户端的连接")

"""返回参数说明:
    dataSocket:新的Socket对象,用于信息传递
    addr:以元组的形式返回客户端的(IP地址,端口号)
"""
dataSocket,addr=listenSocket.accept()  #建立连接,三次握手过程
print("接受一个客户端连接",addr)


while True:
    #读取客户端发送的信息
    #参数说明:BUFFERMAX 指定从接受缓冲区中读取的最大字节数
    recved=dataSocket.recv(BUFFERMAX)   #一直等待对方信息,当对方关闭连接时,返回的是一个空的字节

    #返回数据recved为空Byte,表明对方关闭连接,退出当前循环
    if not recved:
        break

    #读取的数据为Bytes类型,需要解码为字符串类型
    info=recved.decode()
    print(f"接收到的信息为:{info}")

    #发送的数据必须要为Bytes类型,需要编码
    dataSocket.send(f"服务端收到的信息为: {info}".encode())

#通信结束,关闭Socket
dataSocket.close()
listenSocket.close()

客户端代码:
#客户端代码

#导入Socket库
from socket import *

#定义配置参数
IP="127.0.0.1"   #服务器IP地址
SEVERT_PORT=50000   #服务器端口号
BUFFERMAX=1024     #可接收最大缓冲区个数

#创建Socket对象
dataSocket=socket(AF_INET,SOCK_STREAM)
#与服务端建立连接
dataSocket.connect((IP,SEVERT_PORT))  #模拟三次握手过程

while True:
    #用户通过中断输入发送信息
    tosend=input(">>  ")  #INPUT输入的内容为字符串形式
    #发送信息为空,退出循环
    if tosend=="":
        break
    #发送消息为Bytes类型,所以需要编码
    dataSocket.send(tosend.encode())

    #等待接收服务端的消息
    recved=dataSocket.recv(BUFFERMAX)
    #如果返回为空Bytes,表明对方一=已关闭了连接,退出循环
    if not recved:
        break
    #打印读取的信息
    print(f"客户端收到的消息为:{recved.decode()}")
#关闭连接
dataSocket.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值