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()
    
  • 相关阅读:
    【Ecstore2.0】计划任务/队列/导入导出 的执行问题
    【Ecstore2.0】第三方信任登陆问题解决_备忘
    Ecstore 2.0 报表显示空白
    【Linux】 任务调度/计划 cron
    wdcp/wdlinux一键包的php5.3版本添加Zend.so 和Soap.so
    wdcp/wdlinux 在 UBUNTU/linux 中安装失败原因之创建用户
    假如女人是一种编程语言,你会更喜欢哪一种
    Linux中的ln
    wdcp/wdlinux 常用工具及命令集
    php 数组Array 删除指定键名值
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/12592423.html
Copyright © 2011-2022 走看看