头歌-基于 socket 的网络编程

第1关:面向连接的 socket 模型

服务端service

python 复制代码
# -*- coding: utf-8 -*-
# @Time    : 2022/8/1 10:19
# @Author  : 陈玉辉
# @File    : service.py
import socket

HOST = "127.0.0.1" # 在右侧补充代码, 本地主机,指这台计算机,对应的 IP 地址为 127.0.0.1
PORT = 5000  # 端口 0~1024 为系统保留
ADDRESS = (HOST, PORT)
BUFFER = 1024  # 数据发送和接收的最大数据大小

print("初始化服务器主机套接字对象.....")
server = socket.socket()  # 在括号内补充代码, 面向网络的套接字: 通过 网络进行数据交互, TCP 协议,server 就是 socket 的实例
print("绑定主机信息....")

server.bind(ADDRESS)  # 元组,相当于一个参数
server.listen(10)

print("wait client")
conn, addr = server.accept()
while True:
    # 在下方补充代码,获取消息
    recvmsg = conn.recv(BUFFER)
    data = recvmsg.decode("utf-8")
    print("收到来自客户端的消息: ", data)
    if data == "exit":
        break
    # 在下方补充代码,发送消息
    conn.send(data.encode("utf-8"))

server.close()

客户端client

python 复制代码
# -*- coding: utf-8 -*-
# @Time    : 2022/8/1 10:19
# @Author  : 陈玉辉
# @File    : client.py
import socket

# 定义要连接的服务器信息
HOST = "127.0.0.1"  # 在右侧补充代码, 本地主机,指这台计算机,对应的 IP 地址为 127.0.0.1
PORT = 5000  # 端口 0~1024 为系统保留
ADDRESS = (HOST, PORT)
BUFFER = 1024  # 数据发送和接收的最大缓冲区大小 #创建客户端套接字对象
client = socket.socket()  # 在括号内补充代码, 相当于声明 socket 类 型,同时生成 socket 链接对象,面向网络的套接字: 通过网络进行数据交互, TCP #连接服务器
client.connect(ADDRESS)
infos = ["hello service", "I'm client", "exit"]
for info in infos:
    #在下方补充代码,发送信息
    client.send(info.encode("utf-8"))
    # 在下方补充代码, 接收服务端信息 print("等待服务端发送信息: ")
    data=client.recv(BUFFER)
    if data:
        print("收到服务端返回的数据:{}".format(data.decode("utf-8")))
client.close()

第2关:面向无连接的 socket 模型

服务端service

python 复制代码
# -*- coding: utf-8 -*-
import socket

# 定义服务器信息
print('初始化服务器主机信息')
HOST = "127.0.0.1"  # 获取本地主机
PORT = 5001
ADDRESS = (HOST, PORT)
BUFFER = 1024

# 创建 UDP 服务 socket 对象
print("初始化服务器主机套接字对象......")
server = socket.socket(type=socket.SOCK_DGRAM)  # UDP

# 绑定主机信息
server.bind(ADDRESS)
print('绑定的主机信息......')

# 等待连接
print('等待客户端连接')
while True:
    recvmsg, addr = server.recvfrom(BUFFER)  # 收消息
    data = recvmsg.decode("utf-8")
    print("收到来自客户端的消息: ", data)
    
    server.sendto(recvmsg, addr)  # 把收到的消息发送回去

    if data == "exit":
        break

server.close()

客户端client

python 复制代码
import socket

# 定义要连接的服务器信息
HOST = "127.0.0.1"  # 本地主机
PORT = 5001
ADDRESS = (HOST, PORT)
BUFFER = 1024

# 创建客户端套接字对象
client = socket.socket(type=socket.SOCK_DGRAM)  # UDP

msgs = ["hello services", "I'm client", "exit"]

for msg in msgs:
    client.sendto(msg.encode("utf-8"), ADDRESS)  # 发送消息
    
    recvmsg, addr = client.recvfrom(BUFFER)  # 接收消息
    data = recvmsg.decode("utf-8")
    print('收到服务端的发来的消息: ', data)

client.close()
相关推荐
爱写代码的森6 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
REDcker7 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
ANSIOT9 小时前
安朔科技蓝牙无感开锁方案,靠近自动解锁
网络·科技·物联网
晏宁科技YaningAI9 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
HLC++9 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室11 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影11 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙12 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码12 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
groundhappy13 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python