欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-06 08:30:11
...

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://blog.csdn.net/smlxs_lbb/article/details/104935553

相关标签: python