TCP/UDP套接字基础编程及拓展

一、环境

1.1 客户端:windows宿主机

1.2 服务器端:Linux虚拟机

1.3 注意事项

测试套接字编程通信时,先确保C/S能互相ping通,且双方主机防火墙允许目的端口号为“创建的端口号”的数据包通过。

二、代码

2.1 UDP套接字编程

2.1.1 UDPClient.py

from socket import *  # 导入套接字编程所需包# 一个目的地址由(serverName, serverPort)构成。
serverName = 'Write your server IP address(example:192.168.1.1) or domain name(example:www.zhihu.com)' 
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM) # 该行创建一个客户端套接字。第一个参数指示底层网络使用IPv4;第二个参数指示该套接字是UDP套接字,由操作系统自动创建clientSocket的端口号
message = input('Input lowercase sentence:')
# 下面使用encode()方法将报文由字符串类型编码为字节序列,同时使用sendto方法为报文附上服务器地址(serverName, serverPort)并向进程的clientSocket套接字发送分组
clientSocket.sendto(message.encode(),(serverName, serverPort))
# 下面使用recvfrom()方法,将到达该客户端套接字的分组中的数据放入modifiedMessage中,将该分组的源地址放到变量serverAddress中。
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode()) # 将字节类型的modifiedMessage解码转换为字符串类型并输出。
clientSocket.close() # 关闭创建的套接字

2.1.2 UDPServer.py

from socket import *serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort)) # 该行将端口号12000与该serverSocket套接字绑定
print("Server is ready to receive.")
while True: # 保持服务器该套接字始终工作,接收来自客户端的分组message, clientAddress = serverSocket.recvfrom(2048) # 该处代码解释同客户端,其中print(clientAddress)的结果为('IP address', portNumber)modifiedMessage = message.decode().upper() # 将接收到的字符串全部转为大写serverSocket.sendto(modifiedMessage.encode(), clientAddress) # 将信息发回给客户端

2.2 TCP套接字编程

2.2.1 TCPClient.py

from socket import *serverName = 'Write your server IP address(example:192.168.1.1) or domain name(example:www.zhihu.com)'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM) # SCOK_STREAM指示该套接字是TCP套接字,由操作系统自动创建clientSocket的端口号
clientSocket.connect((serverName, serverPort)) # 请求建立TCP连接
sentence = input('Input lowercase sentence:')
clientSocket.send(sentence.encode()) # 已建立TCP连接后,后续通过该套接字发送数据均不再需要指明目的服务器地址。
modifiedSentence = clientSocket.recv(1024)
print('From Server:', modifiedSentence.decode())
clientSocket.close()

2.2.2 TCPServer.py

from socket import *serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('',serverPort)) # 该行将端口号12000与该serverSocket套接字绑定,注意,这个serverSocket套接字是我们的欢迎套接字。
serverSocket.listen(1) # 欢迎套接字监听来自客户的TCP连接请求,且参数规定了请求连接的最大数目。
print('Server is ready to recvive')
while True:connectionSocket, addr = serverSocket.accept() # 当有TCP连接请求时,欢迎套接字使用accept()方法创建一个专用于服务该请求的connectionSocket连接套接字sentence = connectionSocket.recv(1024).decode()modifiedSentence = sentence.upper() # 将收到的数据转为大写connectionSocket.send(modifiedSentence.encode()) # 将转为大写后的数据发回客户端connectionSocket.close() # 关闭该连接套接字。
# 需要注意,欢迎套接字创建完连接套接字后,有关该请求连接客户的所有事项均由连接套接字接管,包括TCP的三次握手及后续的数据传输和连接关闭对话

三、当前问题(待更新解答)

3.1 在UDPServer.py中有一条语句:message, clientAddress = serverSocket.recvfrom(2048)。为什么clientAddress是二元组(IP_address,port _number)?

四、参考资料

计算机网络:自顶向下方法(第8版)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837265.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6款Win电脑高效实用办公软件推荐

作为打工人,是不是总觉得工作效率提不上去呢?今天我就来给大家分享 6 款办公超实用的软件,让你的工作事半功倍! 一、WPS 比office更适合职场小白上手的办公软件!它涵盖了文字、表格、演示等多种功能。写文档时,丰富的模板库能让你快速找到灵感,各种排版和编辑工具一应俱…

bladeX物联网平台私库操作处理步骤

(一)获取对方私库代码并上传到自己的gitlab 步骤 1: 克隆对方的私有仓库 首先,您需要在本地计算机上克隆对方的私有仓库。这通常需要使用HTTPS或SSH URL,并且可能需要身份验证(如用户名和密码、SSH密钥等)。# 假设您已经配置了SSH密钥或知道HTTPS的用户名和密码 git cl…

震撼推荐!性能测试全攻略:零基础也能玩转性能测试!

1、提起性能测试,你的第一反应是什么? 当提到性能测试,你的第一反应是什么?是不屑一顾,认为它很简单,没发展前途、没技术含量?还是觉得它太难了,高不可攀,每当遇到系统的疑难杂症时,抓耳挠腮,无从下手? 很多IT从业人员,认为"性能测试仅仅只是测试的工作,会用…

不同类型的OA办公系统分别有什么作用?

不知道大家有没有发现,在不知不觉间,OA(Office Automation)办公系统的应用已经发展得越来越广泛,可以说是涉及到工作的方方面面。你们想过这是为什么吗? 因为OA办公系统不仅提高了工作效率,还优化了企业的管理流程。随着科技的不断进步,OA办公系统的类型也日益丰富,满…

React+AntD Table支持下拉分页和自定义输入分页条数

实例支持在下拉分页框内输入分页条数来实现自定义分页代码usePageSizeSelect.jsimport {useEffect, useState} from "react"; import Bus from "../../utils/eventBus";export function usePageSizeSelect() {const onInputKeyDown = (e) => {const tem…

LeetCode 2455[可被三整除的偶数平均值]

LeetCode 2455[可被三整除的偶数平均值]题目 链接 LeetCode 2455[可被三整除的偶数平均值] 详情实例提示题解 思路 遍历容器,for 循环遍历,vector 的 at 方法取元素值 判断能否被3整除,不能则继续遍历 能被3整除则判断能否被2整除,即判断奇偶性,不能被2整除,即为奇数则继…

Microsoft.Extensions.AI 初探

本文介绍了Microsoft.Extensions.AI的基本使用。.NET Conf上的介绍 在今年的.NET Conf上Steve Sanderson带来了题为“AI Building Blocks - A new, unified AI layer”的演讲。该演讲的主要内容如下: “大多数.NET应用程序可以通过AI功能变得更加强大和高效,例如语义搜索、自…

如何确定合适的绩效考核周期和频率?

绩效考核周期的确定需要根据企业的实际情况、不同岗位的特殊性、考核指标的性质及考核标准的不同进行综合考虑。 1、一般来说,管理层级越高的岗位,其考核周期也应该设置得相对较长 2、绩效考核周期过短会增加企业的管理成本;过长又会降低绩效考核数据的准确性比如,销售人员…

什么是OA办公系统?为什么OA办公系统对于企业的作用越来越重要?

如何提升工作效率、优化资源配置、加强团队协作能力,成为了每个企业管理者亟需解决的关键问题。随着企业规模的扩展和业务流程的复杂化,传统的手工操作和纸质文件已经无法满足高效办公的需求。 OA(Office Automation)办公系统应运而生,成为了现代企业提高工作效率、优化管…

关于湖北移动机顶盒CM311-1S长虹版本刷机的总结

最近家里的机顶盒不好使了,就捣鼓了一下自己刷机, 机顶盒是湖北移动的CM311-1s,长虹代工的,晶晨的S905L3处理器,2+8G的配置,用着也还行 这个版本的刷机需要拆机顶盒,找内部的短接点,就是背面这个“4R12”的电阻, 刷机需要用到USB双A头线,接靠近后排插座的那个口,插…

从零搭建UVM验证平台 简介

搭建UVM流程:定义interface。Interface是连接DUT和验证平台的桥梁,根据DUT的输入输出参数定义interface,在top_tb里连接interface和DUT。加入transaction。transaction是一个数据包,transaction由sequence产生,通过sequencer传递给driver。加入driver。Driver负责将接收到…