(十六)Python中级知识-网络编程(socket模块)

1、概述

实现网络编程我们需要借助Socket模块,Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

本文只实现了 单工状态的例子。
单工:简单的说就是一方只能发信息,另一方则只能收信息,通信是单向的。
关于半双工和全双工,本案例暂未试验成功。
使用之前先导入模块:

import socket

2、案例

我们需要创建一个服务端用于接收消息,创建一个客户端用于发送消息。

创建服务端流程:创建socket对象=>绑定主机和端口(bind函数)=>监听客户端(accept函数)=>接收客户端发送的信息(recv函数)=>关闭

创建服务端类ServerScoket.py:
import socket

# 创建 Socket 对象
serverScoket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取主机名
host = socket.gethostname()
# 设置一个未被占用的端口
port = 8888
# 绑定主机和端口号
serverScoket.bind((host, port))

# 设置最大连接数,超过后排队
serverScoket.listen(10)

# 设置连接超时时间15秒
serverScoket.settimeout(15)

# accept() 方法返回两个值(socket object, address info),用两个参数来接收
returnScoket, addr = serverScoket.accept()

# 接收服务端响应的数据
recMsg = returnScoket.recv(1024)
print(recMsg.decode("utf-8"))

returnScoket.close()

创建客户端类ClientSocket.py:

创建客户端流程:创建socket对象=>连接服务端的主机和端口(connect函数)=>发送消息(send函数)=>关闭

import socket

# 创建 Socket 对象
clientScoket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取主机名
host = socket.gethostname()
# 设置一个未被占用的端口
port = 8888
# 绑定主机和端口号
clientScoket.connect((host, port))

# 设置连接超时时间15秒
clientScoket.settimeout(15)

clientScoket.send("你好!我来自客户端\n".encode("utf-8"))

clientScoket.close()

输出结果:

运行时需要先运行服务端,然后再启动客户端,由于客户端是发送消息不接受消息,所以发送完之后程序退出,不再输出,所以我们只关注服务端接收的消息。

你好!我来自客户端

3、总结

注意.bind和.connect函数的参数需要通过元组传递对应的主机和端口信息。
socket用完之后需要关闭。
本文相对来说写得比较简单,算是对python3 socket有粗略的认识,其实关于实现半双工和全双工是实际生活中非常常用的,读者可以自己翻阅一些资料来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值