zoukankan      html  css  js  c++  java
  • Socket初识

    Socket初步认识

    ​ 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

    ​ 套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中,使这段信息能传送到其他程序中。因此,两个应用程序之间的数据传输要通过套接字来完成。

    • socket是处于应用层与传输层之间的抽象层,他是一组操作起来非常简单的接口(接受数据)此接口接受数据之后,交由操作系统.
    • 为什么存在socket抽象层? 如果直接与操作系统数据交互非常麻烦,繁琐,socket对这些繁琐的的操作高度的封装,简化.socket在python中就是一个模块.
    import socket
    
    # 买电话
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # 默认基于TCP协议的socket
    
    # 绑定电话卡
    phone.bind(('192.168.14.198',8848))  # 绑定IP地址和端口
    
    # 开机监听
    phone.listen(5)
    print(111)
    
    # 等待连接
    conn, addr = phone.accept() # 阻塞
    print(conn,addr)
    
    from_client_data = conn.recv(1024)  # 至多接受1024个字节  阻塞
    print(f'来自客户端{addr[0]}的消息:{from_client_data.decode("utf-8")}')
    
    to_client_data = input('>>>')
    conn.send(to_client_data.encode('utf-8'))
    conn.close()
    phone.close()
    
    client端
    
    
    import socket
    
    # 买电话
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # 默认基于TCP协议的socket
    
    # 拨号打电话
    phone.connect(('127.0.0.1',8848))
    data = input('请输入>>>')
    
    phone.send(data.encode('utf-8'))
    from_server_data = phone.recv(1024)
    print(f'来自服务端的消息:{from_server_data}')
    
    
    # 关闭电话
    phone.close()
    
    服务器端:
    
    其过程是首先服务器方要先启动,并根据请求提供相应服务:
    
    (1)打开一通信通道并告知本地主机,它愿意在某一公认地址上的某端口(如FTP的端口可能为21)接收客户请求;
    
    (2)等待客户请求到达该端口;
    
    (3)接收到客户端的服务请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。
    
    (4)返回第(2)步,等待另一客户请求。
    
    (5)关闭服务器
    
    客户端:
    
    (1)打开一通信通道,并连接到服务器所在主机的特定端口;
    
    (2)向服务器发服务请求报文,等待并接收应答;继续提出请求......
    
    (3)请求结束后关闭通信通道并终止。
    
    从上面所描述过程可知:
    (1)客户与服务器进程的作用是非对称的,因此代码不同。
    (2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。
    

  • 相关阅读:
    集训笔记——dp继续
    集训笔记——各种dp(dp杂谈)
    集训笔记——dp
    洛谷P3197 [HNOI2008]越狱 题解
    集训笔记——杂题选讲(图论,dp)
    集训笔记——杂题选讲(带数学推导的递推、递归和dp,卡特兰数)
    滑动窗口+二分--P3957 跳房子
    差分+二分答案--P1083 借教室
    逆序对--P1966 火柴排队
    数位dp--P2657 [SCOI2009] windy 数
  • 原文地址:https://www.cnblogs.com/tutougold/p/11354737.html
Copyright © 2011-2022 走看看