zoukankan      html  css  js  c++  java
  • 02python 初识socket(python网络编程)

    什么是socket 

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

    基于TCP协议的socket端        

            sever端        
     
     
     
     
    16
     
     
     
     
     
    1
    import socket
    2
    
    
    3
    
    
    4
    sk = socket.socket()                        # 买手机
    5
    # sk.bind(('ip', 'port'))                   # 绑定ip地址和端口号码以元组的形式传递
    6
    sk.bind(('127.0.0.1', 8898))
    7
    sk.listen()                                 # 监听 等着有人来打电话
    8
    
    
    9
    conn, addr = sk.accept()                    # 接收到别人的电话
    10
    
    
    11
    ret = conn.recv(1024)                       # 设置最大字节
    12
    print(ret)                                  # 打印内容到控制台
    13
    conn.send(b'hi')                            # 和别人说话,必须传一个bytes类型
    14
    
    
    15
    conn.close()                                # 挂电话
    16
    sk.close()                                  # 关手机
     
     
     
            client端        
     
     
     
     
    11
     
     
     
     
     
    1
    import socket
    2
    
    
    3
    
    
    4
    sk = socket.socket()                        # 买手机
    5
    sk.connect(('127.0.0.1', 8898))             # 绑定手机卡
    6
    
    
    7
    sk.send(b'hello')                           # 发送消息
    8
    ret = sk.recv(1024)
    9
    print(ret)
    10
    
    
    11
    sk.close()
     
     
            注意事项:先运行server端,在运行client端  , 基于TCP协议的 socket 接收与发送必须是一致的      
     
            解决方法        

     
     
     
    17
     
     
     
     
     
    1
    import socket
    2
    
    
    3
    
    
    4
    sk = socket.socket()                        # 买手机
    5
    
    
    6
    # sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)  #就是它,在bind前加
    7
    sk.bind(('127.0.0.1', 8898))                # 绑定ip地址和端口号码以元组的形式传递
    8
    sk.listen()                                 # 监听 等着有人来打电话
    9
    
    
    10
    conn, addr = sk.accept()                    # 接收到别人的电话
    11
    
    
    12
    ret = conn.recv(1024)                       # 设置最大字节
    13
    print(ret)                                  # 打印内容到控制台
    14
    conn.send(b'hi')                            # 和别人说话,必须传一个bytes类型
    15
    
    
    16
    conn.close()                                # 挂电话
    17
    sk.close()                                  # 关手机
     
     

            实现多条消息的发送        
     
            sever端        

     
     
     
    20
     
     
     
     
     
    1
    import socket
    2
    
    
    3
    
    
    4
    sk = socket.socket()                                    # 买手机
    5
    # sk.bind(('ip', 'port'))                               # 绑定ip地址和端口号码以元组的形式传递
    6
    sk.bind(('127.0.0.1', 8898))
    7
    sk.listen()                                             # 监听 等着有人来打电话
    8
    conn, addr = sk.accept()                                # 接收到别人的电话
    9
    
    
    10
    ret = conn.recv(1024)                                   # 设置最大字节
    11
    print(ret)                                              # 打印内容到控制台
    12
    conn.send(b'hi')                                        # 和别人说话,必须传一个bytes类型
    13
    
    
    14
    ret = conn.recv(1024)                                   # 接收传过来的今天中午吃什么
    15
    print(ret.decode('utf-8'))
    16
    conn.send(bytes('大腕油泼面价格蛋'.encode('utf-8')))     # 回复一条
    17
    
    
    18
    
    
    19
    conn.close()                                            # 挂电话
    20
    sk.close()                                              # 关手机
     
     
     
            client端        

     
     
     
    17
     
     
     
     
     
    1
    import socket
    2
    
    
    3
    
    
    4
    sk = socket.socket()                                # 买手机
    5
    sk.connect(('127.0.0.1', 8898))                     # 绑定手机卡
    6
    
    
    7
    sk.send(b'hello')                                   # 发送消息
    8
    ret = sk.recv(1024)                                 # 接收传过来的消息
    9
    print(ret)                                          # 打印穿过来的消息
    10
    
    
    11
    sk.send(bytes('中午吃什么?'.encode('utf-8')))       # 再次发送消息。(中文需转码)
    12
    
    
    13
    ret = sk.recv(1024)                                 # 接收回复的‘大腕油泼面价格蛋’
    14
    print(ret.decode('utf-8'))                          # 打印并解码
    15
    
    
    16
    
    
    17
    sk.close()
     
     

            实现server / client端一直聊天        
            server端        

     
     
     
    28
     
     
     
     
     
    1
    import socket
    2
    
    
    3
    
    
    4
    sk = socket.socket()                                    # 买手机
    5
    # sk.bind(('ip', 'port'))                               # 绑定ip地址和端口号码以元组的形式传递
    6
    sk.bind(('127.0.0.1', 8898))
    7
    sk.listen()                                             # 监听 等着有人来打电话
    8
    conn, addr = sk.accept()                                # 接收到别人的电话
    9
    
    
    10
    while True:
    11
        ret = conn.recv(1024).decode('utf-8')
    12
        if ret == 'bey':
    13
            break
    14
        print(ret)
    15
        info = input('>>>')
    16
        conn.send(bytes(info, encoding='utf-8'))
    17
    
    
    18
        # ret = conn.recv(1024)                                   # 设置最大字节
    19
        # print(ret)                                              # 打印内容到控制台
    20
        # conn.send(b'hi')                                        # 和别人说话,必须传一个bytes类型
    21
        #
    22
        # ret = conn.recv(1024)                                   # 接收传过来的今天中午吃什么
    23
        # print(ret.decode('utf-8'))
    24
        # conn.send(bytes('大腕油泼面价格蛋'.encode('utf-8')))       # 回复一条
    25
    
    
    26
    
    
    27
    conn.close()                                            # 挂电话
    28
    sk.close()                                              # 关手机
     
     
     
            client端        

     
     
     
    x
     
     
     
     
     
    1
    import socket
    2
    
    
    3
    
    
    4
    sk = socket.socket()                                # 买手机
    5
    sk.connect(('127.0.0.1', 8898))                     # 绑定手机卡
    6
    
    
    7
    while True:
    8
        info = input('>>>')
    9
        sk.send(bytes(info, encoding='utf-8'))
    10
        ret = sk.recv(1024).decode('utf-8')
    11
        print(ret)
    12
        if ret == 'bey':
    13
            sk.send(b'bey')
    14
            break
    15
        # sk.send(b'hello')                                   # 发送消息
    16
        # ret = sk.recv(1024)                                 # 接收传过来的消息
    17
        # print(ret)                                          # 打印穿过来的消息
    18
        #
    19
        # sk.send(bytes('中午吃什么?'.encode('utf-8')))        # 再次发送消息。(中文需转码)
    20
        #
    21
        # ret = sk.recv(1024)                                 # 接收回复的‘大腕油泼面价格蛋’
    22
        # print(ret.decode('utf-8'))                          # 打印并解码
    23
    
    
    24
    
    
    25
    sk.close()
     
     
  • 相关阅读:
    C#三种模拟自动登录和提交POST信息的实现方法
    关于c#调用C++代码的一些应用的体会
    c# 路径空格---ProcessStartInfo参数问题
    用C#调用Matlab图像处理自制QQ游戏2D桌球瞄准器
    使用C#开发纽曼USB来电小秘书客户端小结
    C#传递参数到线程的n个方法
    C# : 操作Word文件的API
    c# 导出Excel
    使用C#: 自动切换鼠标的左右手习惯
    Linux 系统的文件类型
  • 原文地址:https://www.cnblogs.com/pontoon/p/10242783.html
Copyright © 2011-2022 走看看