头歌-基于 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()
相关推荐
赵庆明老师15 小时前
NET 10 中DLL,并发布到NuGet
服务器·c#·.net
chenyuhao202415 小时前
Linux系统编程:基础IO
linux·运维·服务器
超风15 小时前
Ubuntu可以输入中文,但是IDEA没法输入中文
linux·运维·ubuntu
西格电力科技15 小时前
光伏策略控制服务器如何成为电站智慧转型的中枢与关键一步?
运维·服务器·人工智能·分布式·能源
前进的李工15 小时前
AI安全威胁:对抗样本到数据隐私全解析(13种安全威胁及防护)
网络·人工智能·安全·语言模型·网络攻击模型
猪肉炖白菜15 小时前
TCP/IP协议簇包含的协议
网络·网络协议·tcp/ip
恒创科技HK15 小时前
香港云大宽带服务器常见的配置及价格参考
运维·服务器
默|笙15 小时前
【Linux】进程(3)状态
linux·运维·服务器
Ling_Ze15 小时前
mysql和postgressql数据库在服务器中容器创建和工具连接
服务器·数据库·mysql
Live in Shanxi.15 小时前
Prometheus监控服务器及K8s集群资源
服务器·kubernetes·prometheus