目录
1. 基于UDP Socket API的网络应用开发
- 实验内容:
- 编写基于UDP协议网络聊天程序,要求发送程序和接收程序能够接收键盘输入并彼此之间相互发送数据。
- 实验原理:UDP套接字编程
- UDP:在客户和服务器之间无“连接”
- 没有握手要建立
- 发送方为每个分组附加上目的地址和端口号
- 服务器必须从接收到的分组提取IP地址,端口号
- UDP: 接收到的传输数据可能失序或丢失
- UDP:在客户和服务器之间无“连接”
- 基于UDP协议的无连接客户/服务器的工作流程:
1)编写服务器端程序
from socket import * # 导入socket模块
######'''1.创建套接字'''
serverSocket = socket(AF_INET,SOCK_DGRAM) # 创建UDP套接字
serverPort = 12000
serverSocket.bind(('192.168.43.30',serverPort)) # 绑定地址(IP+端口号)到套接字
print("The server is ready to receive.\n")
while True:
######'''2.服务器接收客户发来的信息'''
received_message, clientAddress = serverSocket.recvfrom(2048) #接收客户发来的数据
print(" "+received_message.decode())
#######'''3.服务器对客户发来的信息作出回应,给客户发信息 '''
send_message_ToClient = input('Server:\n')
serverSocket.sendto(send_message_ToClient.encode(),clientAddress)
2)编写客户端程序
from socket import * # 导入socket模块
######'''1.创建套接字'''
clientSocket = socket(AF_INET,SOCK_DGRAM) # 调用socket()创建UDP套接字
serverName = '192.168.43.30' # 服务器IP地址
serverPort = 12000 # 服务器端口号
print("The client is ready to send.\n")
while True:
######'''2.客户输入信息,并发送给服务器'''
send_message = input('Client:\n') # 客户要发送的信息
clientSocket.sendto(send_message.encode(),(serverName, serverPort))
# 使用sendto: 经clientSocket(UDP套接字)发送一个客户到服务器的数据报
#######'''3.接收服务器发来的信息 '''
receive_message, serverAddress = clientSocket.recvfrom(2048)
# 使用recvfrom:客户等待接收服务器发来的数据
print(" "+receive_message.decode())
#clientSocket.close() #关闭套接字
3)客户程序与服务器程序相互通信,实现网络聊天
2. 基于TCP Socket API的网络应用开发
- 实验内容:
- 编写基于TCP协议网络聊天程序,要求发送程序和接收程序能够接收键盘输入并彼此之间相互发送数据。
- 实验原理:使用TCP套接字编程
- 客户机必须联系服务器
- 服务器进程必须首先运行
- 服务器必须已经生成套接字 (门) ,以欢迎客户机的联系
- 客户机联系服务器,通过:
- 创建客户机本地TCP 套接字
- 定义服务器进程的IP地址,端口号
- 当客户机产生套接字时:客户机TCP创建到服务器TCP 的连接
- 当客户机联系时, 服务器 TCP 为服务器进程生成新的套接字 ,以与客户机通信
- 客户机必须联系服务器
- 基于TCP协议的面向连接的客户/服务器的工作流程:
1)编写服务器端程序
#!/user/bin/env python3
# -*- coding: utf-8 -*-
from socket import *
######'''1.创建套接字'''
welcomeSocket = socket(AF_INET,SOCK_STREAM) #创建TCP套接字
serverPort = 12000
welcomeSocket.bind(('192.168.43.30',serverPort)) #绑定地址(IP+端口号)到套接字
#等待并聆听某个客户敲门 1)此处和UDP不同,要监听
welcomeSocket.listen(1)
while True:
# 新建一个套接字 1)此处和UDP不同,又新建了一个套接字
connectionSocket, addr = welcomeSocket.accept()
######''' 2.服务器接收客户发来的信息'''
sentence = connectionSocket.recv(1024) #接收信息
print(" "+sentence.decode())
#######''' 3.服务器对客户发来的信息作出回应,给客户发信息 '''
send_message_ToClient = input('Server:\n')
connectionSocket.send(send_message_ToClient.encode()) #发送信息
connectionSocket.close() #关闭连接
2)编写客户端程序
#!/user/bin/env python3
# -*- coding: utf-8 -*-
from socket import *
from click._compat import raw_input
print("The client is ready to send.\n")
while True:
######'''1.创建套接字'''
clientSocket = socket(AF_INET, SOCK_STREAM) # 创建TCP套接字
serverName = '192.168.43.30'
serverPort = 12000
clientSocket.connect((serverName, serverPort)) # 创建TCP连接 1)此处使用connect在客户和服务器之间创建一条TCP连接
######'''2.客户输入信息,并发送给服务器'''
send_message = raw_input('Client:\n') # 客户要发送的信息
clientSocket.send(send_message.encode()) # 1)此处使用send,不是sendto。2)而且此处不需要绑定目的地址+IP
#######'''3.接收服务器发来的信息 '''
receive_message, serverAddress = clientSocket.recvfrom(2048) # 使用recvfrom:客户等待接收服务器发来的数据
print(" "+receive_message.decode())
clientSocket.close() #关闭连接
'''
sentence = raw_input('Input lowercase sentence:')
clientSocket.send(sentence.encode()) #发送消息
modifiedSentence = clientSocket.recv(1024) #接收消息
print('From server:',modifiedSentence.decode())'''
#clientSocket.close() #关闭连接
3)客户程序与服务器程序相互通信,实现网络聊天
参考:
https://jzplp.blog.csdn.net/article/details/105984295 计算机网络自顶向下方法 第二章 2.7.1节 关于UDP与socket的小实验 基于python3 (课本Page108-110)
https://blog.csdn.net/feiyang5260/article/details/88728740 python网络编程之基于udp的简易聊天室实现