网络编程(二)——socket(套接字)

1、什么是socket?

由图可见, socket是连接应用层和运输层的中间层,它就是一组接口,它是应用程序访问下层网络服务的接口

网络通信需要遵循一堆协议(如图中的TCP/UDP等),协议即标准,如果想开发一款基于网络通信的软件,就必须遵循这些标准。但是,深入理解TCP/UDP等协议并运用太过复杂,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出来的程序自然就是遵循TCP/UDP标准的。

2、socket种类

socket有两种,分别是基于文件型和基于网络型。

  • 基于文件型:AF_UNIX
  • 基于网络型:AF_INET

3、socket工作流程

使用socket是为了通信,所以把socket工作流程想象成现实中生活情境就容易理解了。

比如:

我要给一位朋友打电话,我先拨号——> 朋友听到电话铃声——>朋友接通电话——>我们建立起连接便可以通话了——>聊天结束——>我们挂掉电话。

socket的工作流程也是如此。

服务端先初始化socket——>然后和端口绑定(bind)——>对端口进行监听(listen)——>调用accept阻塞——>等待客户连接。

客户端初始化一个socket——>连接服务器(connect)——>开始和服务器通信。

客户端发送数据请求——>服务端接受、处理请求——>然后将回应数据发送给客户端——>客户端读取数据——>最后关闭连接——>一次交互结束。

 代码演示:

注意要先运行服务端,先运行客户端会报错(Connection refused),因为此时没有服务端监听端口。

服务端代码:

import socket
# 模拟情景:给别人打电话的流程
# 1、买手机
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2、绑定手机卡
phone.bind(("127.0.0.1",8080))
# 3、开机
phone.listen(5)
# 4、等电话链接
print("starting...")
conn,client_addr = phone.accept()
# 5、收、发消息
while True:
    data = conn.recv(1024)
    print("客户端的数据",data)
    conn.send(data.upper())
# 6、挂电话
conn.close()
# 7、关机
phone.close()

客户端代码:

import socket
# 1、买手机
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2、拨号
phone.connect(("127.0.0.1",8080))
# 3、发、收消息
while True:
    msg = input(">>:").strip()
    phone.send(msg.encode("utf-8"))
    data=phone.recv(1024)
    print(data)
# 4、关闭
phone.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天自洽了吗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值