头歌-基于 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()
相关推荐
tntxia17 小时前
linux curl命令详解_curl详解
linux
扛枪的书生19 小时前
Linux 网络管理器用法速查
linux
顺风尿一寸1 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode1 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫1 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao3 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐4 天前
Linux内存扩容指南
linux
zylyehuo5 天前
Linux 彻底且安全地删除文件
linux
用户805533698035 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297915 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux