头歌-基于 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()
相关推荐
天天爱吃肉82181 小时前
智能网联汽车信息安全深度解析:从UN-R155与GB44495标准到OBD/UDS技术实践
网络·嵌入式硬件·汽车
都小事儿1 小时前
VSCODE:保存文件时删除行尾空格
linux·vscode
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [kernel]sysctl
linux·笔记·学习
Xiaomostream2 小时前
实现TCP服务器:一请求一线程 | epoll
服务器·网络协议·tcp/ip
CS_浮鱼2 小时前
【Linux】进程信号
linux·运维·服务器
wanhengidc2 小时前
云手机的出现意味着什么
运维·服务器·web安全·智能手机·云计算
wanhengidc2 小时前
云手机的硬件技术
运维·服务器·web安全·游戏·智能手机
Thexhy2 小时前
CentOS快速安装DockerCE指南
linux·docker
路人甲ing..2 小时前
Android Studio 快速的制作一个可以在 手机上跑的app
android·java·linux·智能手机·android studio