一、实验目的
- 了解Socket通信的概念,掌握Socket通信的编程方法
- 理解TCP和UDP协议的工作原理与工作过程
- 编写基于TCP和UDP的客户/服务器的程序,来了解两者的工作流程
- 要求能够在自己的电脑上运行程序并进行数据传输
二、实验内容
-
阅读API编程 PPT。了解 socket 编程的基本知识。
-
编写基于 TCP 的客户/服务器程序。
-
编写基于 UDP 的客户/服务器程序。
三、实验原理
C 库中包含了用语网络通信的 socket 套接字。Socket 套接字分为流式套接口、 数据报套接口及原始套接口 3 类,本实验中将涉及到前两者:
流式套接口定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数 据传输(TCP)。
数据报套接口定义了一种无连接的服务, 数据通过相互独立的报文进行传输, 是无序的, 并且不保证可靠,无差错(UDP)。
四、实验步骤
(一)基于UDP的客户/服务器编写
(二)基于TCP的客户/服务器编写
五、实验结果及分析
(一)基于UDP的客户/服务器
客户端代码
from socket import *
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input()
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print('From Server: ', modifiedMessage.decode())
clientSocket.close()
服务器端代码
from socket import *
serverPort=12000
serverSocket=socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort))
print("The srever is ready to receive")
while True:
message,clientAddress=serverSocket.recvfrom(2048)
modifiedMessage=message.decode().upper()
serverSocket.sendto(modifiedMessage.encode(),clientAddress)
测试结果
(二)基于TCP的客户/服务器编写
客户端代码
from socket import *
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
sentence = input()
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(1024)
print('From Server: ', modifiedSentence.decode())
clientSocket.close()
服务器端代码
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(1)
print('The server is ready to receive')
while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024)
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence)
connectionSocket.close()
测试结果
七、实验心得体会
通过该实验,了解了socket编程的基本方法,学习了利用TCP和UDP进行简单的数据传输。编写基于TCP和UDP的客户/服务器的程序,了解了两者的工作流程和协议工作原理。在实验过程中,也对应用层有了更直观和深入的理解。