Socket实现套接字通信

套接字工作流程:

 

一、简单socket通信

①服务端

复制代码
import socket

# 1 买手机
phone = socket.socket()

# 2 绑定手机卡
phone.bind(('127.0.0.1', 8080))

# 3 开机
phone.listen(5)

# 4 等电话连接
conn, addr = phone.accept()

# 5 收发消息
data = conn.recv(1024)  # 1、单位:bytes   2:1024代表最大接收1024个bytes
print('客户端的数据', data)

conn.send(data.upper())

# 6 挂电话
conn.close()

# 7 关机
phone.close()
复制代码

②客户端

复制代码
import socket

# 1 买手机
phone = socket.socket()

# 2 拨号
phone.connect(('127.0.0.1', 8080))

# 3 发收数据
phone.send('hello'.encode('utf-8'))
data = phone.recv(1024)
print(data)

# 4 关机
phone.close()
复制代码

先运行服务端代码、再运行客户端代码,打印的结果:

服务端:

 客户端:

 

 

二、通信循环

①服务端

复制代码
import socket

phone = socket.socket()
phone.bind(('127.0.0.1', 8080))
phone.listen(5)

conn, addr = phone.accept()

# 通信循环
while True:
    try:
        data = conn.recv(1024)  # 1、单位:bytes   2:1024代表最大接收1024个bytes
        # 针对于Linux系统
        if not data:
            break
        print('客户端的数据', data)
        conn.send(data.upper())
    except ConnectionResetError:
        break

conn.close()
phone.close()
复制代码

 ②客户端

复制代码
import socket

phone = socket.socket()
phone.connect(('127.0.0.1', 8080))

while True:
    msg = input('>>>:').strip()
    if not msg:
        continue
    phone.send(msg.encode('utf-8'))
    data = phone.recv(1024)
    print(data.decode('utf-8'))

phone.close()
复制代码

先运行服务端代码、再运行客户端代码,打印的结果:

服务端:

客户端:

 

三、链接循环

①服务端

复制代码
import socket

phone = socket.socket()
phone.bind(('127.0.0.1', 8080))
phone.listen(5)


# 链接循环
while True:
    conn, addr = phone.accept()
    # 通信循环
    while True:
        try:
            data = conn.recv(1024)  # 1、单位:bytes   2:1024代表最大接收1024个bytes
            # 适用于Linux系统
            if not data:
                break
            print('客户端的数据', data)
            conn.send(data.upper())
        except ConnectionResetError:
            break

    conn.close()
phone.close()
复制代码

②客户端

复制代码
import socket

phone = socket.socket()
phone.connect(('127.0.0.1', 8080))

while True:
    msg = input('>>>:').strip()
    if not msg:
        continue
    phone.send(msg.encode('utf-8'))
    data = phone.recv(1024)
    print(data.decode('utf-8'))

phone.close()
复制代码

 

四、模拟ssh远程执行命令

服务端:

客户端:

 

 

 

posted @   困了就睡觉觉  Views(178)  Comments(0Edit  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示