Socket 简介及面试题
发布日期:2021-05-15 20:57:41 浏览次数:19 分类:精选文章

本文共 2614 字,大约阅读时间需要 8 分钟。

槽,英语缩写,也被称为"套接字"。槽是在网络编程中常用的抽象概念。它本质上是基于TCP/IP协议的网络通信接口。槽的概念起源于Unix系统,展现了 Unix/Linux哲学中的"一切皆为文件"思想。通过打开(open)、读取(read)/写入(write)、关闭(close) 操作,开发者可以对槽进行管理。槽作为操作系统提供的抽象接口,为网络通信提供标准化的操作方法,是实现网络通信的核心工具。

###_SOCKET通信流程cassette_server

  • 初始化槽并绑定到指定的网络接口和端口。
  • 启动监听功能,等待客户端连接。
  • 接受客户端的连接请求,并为客户端创建新的槽进行通信。cassette_client
  • 初始化槽并指定目标服务器的地址和端口。
  • 试图连接到服务器。连接成功后,客户端与服务器之间建立了通信渠道。
  • 双方通过ı/o操作进行数据交换。
  • 常见面试题

    编写一个网络应用程序(含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则适合实时性要求较高但可靠性要求较低的场景。在实际项目中,您需要根据具体需求选择合适的协议来设计网络通信方案。

    上一篇:二叉树,红黑树,B Tree,B+Tree详解
    下一篇:OSI七层协议模型、TCP/IP四层模型学习笔记

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月20日 05时31分57秒