• python--socket编程


    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

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

    #--基于TCP/IP 套接字 服务端的简单实例

    #tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端

    服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束

    from socket import socket
    ip_port=("127.0.0.1",8080)
    buf_size=1024
    
    tcp_server=socket(AF_INET,SOCK_STREAM)
    tcp_server.bind(ip_port)
    tcp_server.listen(5)
    conn,addr=tcp_server.accpet()
    msg=conn.recv(buf_size)
    print("收到客户端发送的消息",msg.decode("utf-8"))
    conn.send(msg.upper())
    conn.close()
    tcp_server.close()
    tcp_server服务端

    #基于TCP/IP 套接字 客户端的简单实例

    from socket import *
    ip_port=("127.0.0.1",8080)
    buf_size=1024
    tcp_client=socket(AF_INET,SOCK_STRAM)
    tcp_client.connect(ip_port)
    tcp_client.send("hello".encode("utf-8"))
    data=client.recv(buf_size)
    print("客户端收到消息",data.decode("utf-8"))
    tcp.client.close()
    tcp_client客户端

    #基于UDP的套接字服务端示例

    #udp是无链接的,先启动哪一端都不会报错

    from socket import *
    ip_port=("127.0.0.1",8080)
    buf_size=1024
    udp_server=socket(AF_INET,SOCK_DGRAM)
    udp_server.bind(ip_port)
    msg,addr=udp_server.recvfrom(buf_size)
    print("服务端收到消息",msg.decode("utf-8"))
    udp_server.sendto(msg.upper(),addr)
    udp_server服务端

    #基于UDP的套接字客户端示例

    from socket import *
    ip_port=("127.0.0.1",8080)
    buf_size=1024
    udp_client=socket(AF_INET,SOCK_DRGAM)
    udp_client.sendto("hello".encode("utf-8"),ip_port)
    data,addr=udp_client.recvfrom(bufsize)
    print(data.decode("utf-8"))
    udp_client客户端
    如果我失败了,至少我尝试过,不会因为痛失机会而后悔
  • 相关阅读:
    solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
    Solr_全文检索引擎系统
    MySQL设置字段的默认值为当前系统时间
    mybatis_常用标签
    mybatis_映射查询
    Vue核心知识——computed和watch的细节全面分析
    nrm的安装与使用
    Windows下安装及使用NVM
    github仓库添加MIT许可
    ES6——箭头函数与普通函数的区别
  • 原文地址:https://www.cnblogs.com/tangcode/p/11534052.html
Copyright © 2020-2023  润新知