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

书读的越多而不加思考,你就会觉得你知道得很多;而当你读书而思考得越多的时候,你就会越清楚地看到,你知道得很少。

导读:本篇文章讲解 网络编程(二)——socket(套接字),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、什么是socket?

网络编程(二)——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)——>开始和服务器通信。

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

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

 代码演示:

注意要先运行服务端,先运行客户端会报错(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()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/122905.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!