python 套接字scoket

一、 套接字概念

套接字分为面向连接的套接字和无连接的套接字

    1、面向连接的套接字

        又称为虚拟电路或流套接字,通信之前必须先建立连接。使用TCP、IP协议或者TCP、AF-LOCAL/AF-UNIX,都必须使用SOCK-STREAM作为套接字类型。

        面向连接的通信提供序列化的、可靠的、不重复的数据交互,无记录边界,每条消息可以拆分为多个片段,到达目的地可以按顺序组合起来,降完整的信息传递给应用程序。

    2、无连接套接字

        数据报类型的套接字,使用UDP、IP协议,必须使用SOCK-DGRAM作为套接字类型,通信之前不需要建立连接。

        必须整体发送,可能有重复的消息。

        优点:成本低,性能高

二、 python 中的网络编程

    1、主要模块

        socket

        安装:

            pip install socket

    2、创建套接字

        语法: socket.socket(socket_family, socket_type, protocol=0)

            解释参数:

                    socket_family: AF-UNIX或AF-INET;

                    socket_type:          SOCK-DGRAM或SOCK-STREAM

                     protocol:    默认0,通常省略

       

    import socket

    # 创建TCP/IP套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 创建UDP/IP套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
3、创建套接字服务端
        
import socket

# 创建TCP/IP套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 创建UDP/IP套接字
# udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

HOST = "localhost"
PORT = 33334
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcp_socket.bind(ADDR)   # 绑定主机和端口到套接字上
tcp_socket.listen(5)    # 启动监听,最大连接数为5
try:
    while True:
        print("等待客户端连接...")
        tcp_client_socket, addr = tcp_socket.accept()  # 等待客户端连接,客户端连接后,返回独立的客户端套接字
        print('连接来自:', addr)
        while True:
            data = tcp_client_socket.recv(BUFSIZE)  # 接收tcp消息
            if not data:
                break
            tcp_client_socket.send(data)  # 发送tcp消息
        tcp_client_socket.close()
except Exception as e:
    print(e)
finally:
    tcp_socket.close()

    4、创建客户端

            

import socket

HOST = "localhost"
PORT = 33334
BUFSIZE = 1024
ADDR = (HOST, PORT)
cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cs.connect(ADDR)
try:
    while True:
        data = input('请输入>')
        if not data:
            break
        cs.send(data.encode('utf-8'))
        res_data = cs.recv(BUFSIZE)
        if not res_data:
            break
        print(res_data.decode('utf-8'))
except Exception as e:
    print(e)
finally:
    cs.close()

    5、运行顺序和结果

        先运行服务端,再运行客户端

        服务器结果:

                等待客户端连接...
                连接来自: ('127.0.0.1', 51551)
                等待客户端连接...

                连接来自: ('127.0.0.1', 51566)  

       客户端:

                请输入> 
 
                请输入>        

            

    

猜你喜欢

转载自blog.csdn.net/qq_36255988/article/details/80160252
今日推荐