美文网首页
socket 实现客户端与服务端通信

socket 实现客户端与服务端通信

作者: 问_lb | 来源:发表于2020-03-12 00:37 被阅读0次

    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

    Python内的Socket已经默认实现了TCP和UDP两种传输协议。

    本文通过一个简单的例子记录一下socket的简单使用方法。

    实现:客户端和服务端通过TCP协议通信,客户端向服务端发送消息,服务端接收消息后添加 “ too !” 字符串后返回给客户端,客户端可以主动断开连接。

    服务端代码

    import socket
    import threading
    
    # AF_INET表示ipv4地址类型, AF_INET6表示ipv6地址类型
    # SOCK_STREAM: 表示传输协议类型是TCP,SOCK_DGRAM:表示传输协议类型是UDP
    socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置是否复用,True表示复用
    socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    
    hostname = socket.gethostname()
    ip = socket.gethostbyname(hostname)
    port = 9000
    addr = (ip, port)
    socket_server.bind(addr)
    
    # 设置监听, 128: 表示最大等待的连接个数
    socket_server.listen(128)
    
    def handle_client(socket_client: socket.socket):
        while True:
            recv_data = socket_client.recv(1024)
            if recv_data:
                recv_content = recv_data.decode("utf-8")
                print("接收客户端的数据为:", recv_content)
                # 发送数据
                socket_client.send((recv_content + " too !").encode("utf-8"))
            else:
                print("客户端下线了")
                break
    
    
    while True:
        (socket_client, addr_client) = socket_server.accept()
        sub_thread = threading.Thread(target=handle_client, args=(socket_client,))
        # 设置守护主线程
        sub_thread.setDaemon(True)
        sub_thread.start()
    

    客户端代码

    import socket
    import time
    
    socket_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    hostname = socket.gethostname()
    ip = socket.gethostbyname(hostname)
    port = 9000
    addr = (ip, port)
    socket_client.connect(addr)
    
    exit_list = ["byebye", "exit"]
    
    while True:
        msg = input("请输入:")
        if msg in exit_list:
            socket_client.close()
            break
        msg_data = msg.encode("utf-8")
        socket_client.send(msg_data)
        recv_data = socket_client.recv(1024)
        recv_msg = recv_data.decode("utf-8")
        print(recv_msg)
    

    现在我们已经对socket有所了解了,然后让我们尝试使用socket去实现静态web服务器
    https://www.jianshu.com/p/b6d010ab1d31

    相关文章

      网友评论

          本文标题:socket 实现客户端与服务端通信

          本文链接:https://www.haomeiwen.com/subject/kjsodhtx.html