计算机网络-socket程序设计

实验名称:SOCKET 网络程序设计

实验目的与要求:

•理解进程通信的原理及通信过程;
•掌握基本的网络编程方法;
•需要有流程图;
•需要抓取传输内容,比如“你的名字和学号”;
•实现并发服务器。

实验环境说明:

Pycharm、wireshark、RawCap

实验过程、步骤(可另附页、使用网络拓扑图等辅助说明)及结果:

先画流程图:

image-20221230115058372

编写server.py:

image-20221230115104402

编写client.py:

image-20221230115111776

启动server后启动client,查看运行结果:

image-20221230115120350

image-20221230115144481

可以看出,client连接目标端口后,server将client的地址信息打印出来,同时向client发送信息,client接收后向Server发送信息,均能成功接收,完成所有任务后server关闭连接。
接下来使用wireshark对本地回环进行抓包,由于本实验的server和client均是建立在本地主机上的,默认的Wincap无法抓本地回环包,在上网查阅资料后发现可以使用RawCap+wireshark来抓本地回环包。
下载并安装RawCap:

image-20221230115155108

使用wireshark抓取Loopback网卡包,指定端口为目标端口12345:

image-20221230115201158

image-20221230115207650

发现成功抓取server和client之间的信息传输内容,其中中文部分由于编码原因,没有显示。

附程序代码:
Server.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-*- coding: UTF-8 -*-

import socket # 导入 socket 模块

s = socket.socket() # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口
s.bind((host, port)) # 绑定端口

s.listen(5) # 等待客户端连接
while True:
c, addr = s.accept() # 建立客户端连接
print('连接地址:', addr)
c.send(bytes('欢迎访问曹嘉美_20052201_Server!',encoding="utf-8"))
print(str(c.recv(1024),encoding="utf-8"))
c.close() # 关闭连接

Client.py:

1
2
3
4
5
6
7
8
9
10
import socket  # 导入 socket 模块

s = socket.socket() # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口号

s.connect((host, port))
print(str(s.recv(1024),encoding="utf-8"))
s.send(bytes("client:曹嘉美_20052201",encoding="utf-8"))
s.close()

计算机网络-socket程序设计
http://example.com/2022/12/30/计算机网络-socket程序设计/
作者
Magnesium
发布于
2022年12月30日
许可协议