zoukankan      html  css  js  c++  java
  • socket套接字

    Socket

    1.什么是Socket

    ​ socket是一个模块,可以写一套c/s架构的套接字

    2.为甚要使用Socket

    ​ socket套接字会封装好各层协议的工作

    ​ 好处:

    ​ 可以节省开发成本。

    3.如何使用

    ​ import scoket

    注意:客户端与服务端必须遵循:

    ​ 一端send 另一端recv

    ​ 不能两端同时send或recv

    初始socket套接字

    # 服务端*********************************
    import socket
    
    server=socket.socket()
    
    #绑定(主机,端口号)到套接字
    server.bind(('127.0.0.1',9527))
    
    #开始TCP监听
    server.listen(5)#listen(5)半连接池 设置等待程序个数
    
    #被动接受TCP客户的连接,(阻塞式)等待连接的到来
    # conn: 相当于服务端往客户端挖的管道
    conn,addr=server.accept()
    print(addr)
    
    data=conn.recv(1024).decode('utf-8')
    print(data)
    
    conn.send('我不好'.encode('utf-8'))
    
    conn.close()
    
    server.close()
    
    # 客户端*************************************
    import socket
    
    client=socket.socket()
    
    #主动初始化TCP服务器连接
    # client: 相当于客户端往服务端挖的管道
    client.connect(('127.0.0.1',9527))
    
    client.send('你好'.encode('utf-8'))
    
    data=client.recv(1024).decode('utf-8')
    print(data)
    
    
    # 关闭连接
    client.close()
    

    循环通信套接字

    # 服务端
    import socket
    
    server=socket.socket()
    
    #绑定(主机,端口号)到套接字
    server.bind(('127.0.0.1',9527))
    
    #开始TCP监听
    server.listen(5)#listen(5)半连接池 设置等待程序个数
    
    #被动接受TCP客户的连接,(阻塞式)等待连接的到来
    conn,addr=server.accept()
    print(addr)
    while True:
        data=conn.recv(1024).decode('utf-8')
        print(data)
    
        if data=='q':
            break
    
        send_msg=input('server--->client').encode('utf-8')
        conn.send(send_msg)
    
    conn.close()
    
    server.close()
    
    # 客户端
    import socket
    
    client=socket.socket()
    
    #主动初始化TCP服务器连接
    client.connect(('127.0.0.1',9527))
    while True:
        send_msg=input('client--->srevre:').encode('utf-8')
        client.send(send_msg)
        if send_msg=='q':
            break
    
        data=client.recv(1024).decode('utf-8')
        print(data)
    
    client.close()
    

    服务端多个客户端

    # 服务端
    import socket
    
    server=socket.socket()
    
    #绑定(主机,端口号)到套接字
    server.bind(('127.0.0.1',9527))
    
    #开始TCP监听
    server.listen(5)#listen(5)半连接池 设置等待程序个数
    while True:
        #被动接受TCP客户的连接,(阻塞式)等待连接的到来
        conn,addr=server.accept()
        print(addr)
        while True:
            try:
    
                data=conn.recv(1024).decode('utf-8')
                print(data)
    
                # mac和linux系统bug: b''
                if len(data) == 0:
                    continue
    
                if data=='q':
                    break
    
    
                conn.send(data.encode('utf-8'))
    
            except Exception as e:
                print(e)
                break
        conn.close()
    
    server.close()
    
    # 客户端
    import socket
    
    client=socket.socket()
    
    #主动初始化TCP服务器连接
    client.connect(('127.0.0.1',9527))
    while True:
        send_msg=input('client--->srever:').encode('utf-8')
    
        client.send(send_msg)
        if send_msg=='q':
            break
    
        data = client.recv(1024).decode('utf-8')
        print(data)
    
    client.close()
    
  • 相关阅读:
    《编译原理》-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法
    8 张脑图入门 JavaScript
    Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决
    Spring boot 多模块项目 + Swagger 让你的API可视化
    Spring Boot -05- 多模块结构项目构建与测试(详细图文教程)IDEA 版
    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)
    SSM 项目从搭建爬坑到 CentOS 服务器部署
    LeetCode
    有趣的位运算
    记一次向maven中央仓库提交依赖包
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/12592423.html
Copyright © 2011-2022 走看看