Socket简述
socket迁移于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
基本上,Socket 是任何一种计算机网络通讯中最基础的内容。例如当你在浏览器地址栏中输入 http://www.cnblogs.com/ 时,你会打开一个套接字,然后连接到 http://www.cnblogs.com/ 并读取响应的页面然后然后显示出来。而其他一些聊天客户端如 gtalk 和 skype 也是类似。任何网络通讯都是通过 Socket 来完成的。
socket和file的区别:
1、file模块是针对某个指定文件进行【打开】【读写】【关闭】
2、socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
——来自连接一作者的说法。
代码部分
服务端
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py
import socket # 导入 socket 模块
s = socket.socket() # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 等待客户端连接
print("等待完毕····")
while True:
c,addr = s.accept() # 建立客户端连接
print('连接地址:%s',addr)
var='欢迎访问菜鸟教程!'
var=var.encode()
c.send(var)
c.close() # 关闭连接
客服端
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py
import socket # 导入 socket 模块
s = socket.socket() # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口号
s.connect((host, port))
var=s.recv(1024)
var=var.decode()
print(var)
# print(s.recv(1024))
s.close()
这部分代码是来自菜鸟链接下方参考资料链接3,但由于使用时候报错:
“TypeError: a bytes-like object is required, not ‘str’ ”
由于编码问题,参考链接:Python报“TypeError: a bytes-like object is required, not ‘str’ ”解决办法 - 付杰博客
解决了问题,感谢。
参考资料
python之socket编程_mxh的博客-CSDN博客_python socket【精品】
Python中socket解读_python学习者的博客-CSDN博客_python socket【精品】
Python实现Socket通信的简单例子_su_bao的博客-CSDN博客_python socket通信
Python 官方关于 Socket 的函数请看 socket — Low-level networking interface — Python 3.10.0 documentation