头歌-基于 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()
相关推荐
未济9 小时前
linux 配置环境变量
linux
傲世仙尊9 小时前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫10 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.11 小时前
进程间通信
linux
Liuqy-0512 小时前
Linux IO编程——静态库、动态库
linux
wuyk55512 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
彧azz12 小时前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅13 小时前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog13 小时前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
AIgorithmGEEK13 小时前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid