zoukankan      html  css  js  c++  java
  • 网络编程--socket

    套接字编程Socket

    什么是套接字Socket?

    Socket是应用层与传输层,网络层之间的抽象层。它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

    所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

    套接字可以根据IP进行ARP协议找到指定的电脑,在根据Port找到电脑中相应的程序。

    半连接池

    其实就是tcp三次握手中,客户端向服务器发送了连接请求,服务端响应了请求,等待最后服务器到客户端之间的传输通道的,客户端响应(简单来说就是三次握手的第三次

    Socket实现流程

    AF_INET(又称 PF_INET)是 IPv4 网络协议的套接字类型,AF_INET6 则是 IPv6 的;而 AF_UNIX 则是 Unix 系统本地通信。

    选择 AF_INET 的目的就是使用 IPv4 进行通信。因为 IPv4 使用 32 位地址,相比 IPv6 的 128 位来说,计算更快,便于用于局域网通信。

    而且 AF_INET 相比 AF_UNIX 更具通用性,因为 Windows 上有 AF_INET 而没有 AF_UNIX。
    简单Socket实现

    服务器端

    import socket
    
    #初始化套接字对象,指定套接字的为ipv4,和tcp协议
    s_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    #给套接字服务器对象绑定ip和端口号
    s_socket.bind(('127.0.0.1',9000))
    
    #给服务器设置半连接池,同时最多只有5个客户端可以等待连接完成,多余的客户端无法连接
    s_socket.listen(5)
    
    #堵塞等待客户端来连接,并获取数据传输通道和客户端ip和端口
    con,addr=s_socket.accept()
    
    print(addr)
    
    #堵塞接收,从网卡中读取1024字节的数据
    data=con.recv(1024)
    
    #向客户端发送二进制的数据
    con.send(data)
    
    #关闭传输通道
    con.close()
    
    #关闭服务端
    s_socket.close()
    

    客户端

    import socket
    
    #创建客户端socket对象
    soc=socket.socket()
    
    #向指定的ip和端口发起连接请求
    soc.connect(('127.0.0.1',9000))
    
    soc.send(b'xxx')
    
    data=soc.recv(1024)
    
    print(data)
    
    soc.close()
    
  • 相关阅读:
    跳转指定页面
    如何解决项目中.a文件中的.o冲突
    地图根据起点和终点计算中心点角度来绘制弧线 iOS
    codePush常用
    ios原生push到RN界面后pop
    atomic,nonatomic的区别
    KVC
    jQuery绑定event事件的各种方法比较
    Git常用命令总结
    多个$(document).ready()的执行顺序问题
  • 原文地址:https://www.cnblogs.com/zx125/p/11478246.html
Copyright © 2011-2022 走看看