
Socket 简介及面试题
初始化槽并绑定到指定的网络接口和端口。 启动监听功能,等待客户端连接。 接受客户端的连接请求,并为客户端创建新的槽进行通信。cassette_client 初始化槽并指定目标服务器的地址和端口。 试图连接到服务器。连接成功后,客户端与服务器之间建立了通信渠道。 双方通过ı/o操作进行数据交换。
发布日期:2021-05-15 20:57:41
浏览次数:19
分类:精选文章
本文共 2614 字,大约阅读时间需要 8 分钟。
構
槽,英语缩写,也被称为"套接字"。槽是在网络编程中常用的抽象概念。它本质上是基于TCP/IP协议的网络通信接口。槽的概念起源于Unix系统,展现了 Unix/Linux哲学中的"一切皆为文件"思想。通过打开(open)、读取(read)/写入(write)、关闭(close) 操作,开发者可以对槽进行管理。槽作为操作系统提供的抽象接口,为网络通信提供标准化的操作方法,是实现网络通信的核心工具。
###_SOCKET通信流程cassette_server
常见面试题
编写一个网络应用程序(含TCP和UDP两种协议),实现客户端向服务器发起数据请求,服务器接收后处理并返回数据。
TCP实现
cassette_server TCP
import socketdef length_calculator(str): return len(str)def TCPServer(): host = '' # 服务器绑定的主机名或IP port = 9999 # 服务器监听的端口 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((host, port)) s.listen(1) # 设置监听 backlog conn, addr = s.accept() with conn: print('Connected by', addr) data = conn.recv(1024).decode() if data: print('Server received:', data) reply = length_calculator(data) conn.sendall(reply.encode()) else: print('Connection closed')def TCPClient(): host = 'localhost' # 目标服务器地址 port = 9999 # 目标服务器端口 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((host, port)) print('Connected to server...') data = input('Please enter data to send: ') if data: print('Client sending:', data) s.sendall(data.encode()) reply = s.recv(1024).decode() print('Server replied:', reply)
UDP实现
cassette_server UDP
import socketdef UDPServer(): host = '' # 服务器绑定的主机名或IP port = 9999 # 服务器监听的端口 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind((host, port)) print('Listening on', host, 'port', port) while True: data, addr = s.recv(1024) if not data: break print('Received from', addr, ':', data.decode()) reply = 'Answer to your data length' s.sendto(reply.encode(), addr)def UDPClient(): host = 'localhost' # 目标服务器地址 port = 9999 # 目标服务器端口 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.connect((host, port)) print('Connected to server...') data = input('Please enter data to send: ') if data: print('Client sending:', data) s.sendto(data.encode(), (host, port)) reply, addr = s.recv(1024) print('Server replied:', reply.decode()) print('From', addr)
总结
通过以上实现,您可以理解Socket在TCP和UDP协议中的应用场景。TCP适合需要可靠连接的场景,而UDP则适合实时性要求较高但可靠性要求较低的场景。在实际项目中,您需要根据具体需求选择合适的协议来设计网络通信方案。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月20日 05时31分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
点亮细胞171-180
2019-03-12
C++ Primer Plus读书笔记:c++字符串
2019-03-12
CSU 1757: 火车入站(区间覆盖的最大覆盖深度)
2019-03-12
C++ Primer Plus读书笔记:循环读取(错误处理)
2019-03-12
skimage与cv2 安装失败的解决办法
2019-03-12
linuxmint 上面装谷歌浏览器
2019-03-12
windows/linux下Anaconda管理的(安装的)包的位置
2019-03-12
关于吴恩达的深度学习的一些授课视频里面英文翻译错误的实例展示
2019-03-12
伴随矩阵和逆矩阵的关系证明
2019-03-12
反向传播之矩阵求导dL/dz1的求导过程 普通神经网络的逆向求导过程
2019-03-12
numpy.linspace使用详解
2019-03-12
突破Bias-Variance困境
2019-03-12
函数可导和可微的区别: 一元中互为充要;多元中可微是可导的必要条件,可导不一定可微。
2019-03-12
Form窗体属性
2019-03-12
自恢复保险丝的选用
2019-03-12
Altium Designer唤出关掉的窗口
2019-03-12
输入过欠压保护电路原理图
2019-03-12
altium designer PCB 屏蔽DRC报错
2019-03-12