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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值