计算机网络-UDP和TCP套接字编程

这篇博客介绍了如何使用Python的socket库来开发基于UDP和TCP协议的网络聊天程序。对于UDP,展示了无连接的客户/服务器工作流程,包括创建套接字、接收和发送数据。对于TCP,讲解了面向连接的客户/服务器模型,包括服务器的监听和连接建立过程。实验内容包括编写服务器端和客户端程序,实现双方的交互通信。
摘要由CSDN通过智能技术生成

目录

1. 基于UDP Socket API的网络应用开发

 2. 基于TCP Socket API的网络应用开发 


1. 基于UDP Socket API的网络应用开发

  • 实验内容:
    • 编写基于UDP协议网络聊天程序,要求发送程序和接收程序能够接收键盘输入并彼此之间相互发送数据。
  • 实验原理:UDP套接字编程
    • UDP:在客户和服务器之间无“连接”
      • 没有握手要建立
      • 发送方为每个分组附加上目的地址和端口号
      • 服务器必须从接收到的分组提取IP地址,端口号
    • 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的简易聊天室实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_39450145

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值