【计算机网络】python——socket编程(TCP/UDP)
前言
以前做了实验都是直接分享实验报告。反思了一下,实验报告又臭又长,最多只有同做这个实验的朋友会耐着性子看一看。为了提供更有效的知识分享,能为更多的朋友提供一些参考,以后的文章我都会尽量主题鲜明,简洁易读哒。
目录
- 前言
- 一.Socket
- 二.采用TCP进行数据发送的简单程序(python)
- C-S之间的动作次序
- Server:
- Client:
- 测试
- 三.采用UDP进行数据发送的简单程序(python)
- C-S之间的动作次序
- Server:
- Client:
- 测试
- 四.参考资料
- 五.总结
一.Socket
Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开一个文件句柄,将数据读写到稳定的存储器上一样。一个socket允许应用程序添加到网络中,并与处于同一个网络中的其他应用程序进行通信。一台计算机上的应用程序向socket写入的信息能够被另一台计算机上的另一个应用程序读取,反之亦然。
不同类型的socket与不同类型的底层协议族以及同一协议族中的不同协议栈相关联。现在TCP/IP协议族中的主要socket类型为流套接字(sockets sockets)和数据报套接字(datagram sockets)。流套接字将TCP作为其端对端协议(底层使用IP协议),提供了一个可信赖的字节流服务。一个TCP/IP流套接字代表了TCP连接的一端。数据报套接字使用UDP协议(底层同样使用IP协议),提供了一个"尽力而为"(best-effort)的数据报服务,应用程序可以通过它发送最长65500字节的个人信息。一个TCP/IP套接字由一个互联网地址,一个端对端协议(TCP或UDP协议)以及一个端口号唯一确定。
二.采用TCP进行数据发送的简单程序(python)
服务器首先运行,等待连接建立
1.服务器进程必须先处于运行状态
- 创建欢迎socket
- 和本地端口绑定
- 在欢迎socket上阻塞式等待接收用户的链接
客户端主动和服务器建立连接
2.创建客户端本地套接字(隐式捆绑到本地port)
- 指定服务器进程的IP地址和端口号,与服务器进程连接
3.连接API调用有效时,客户端P与服务器建立了TCP连接
4.当与客户端连接请求到来时
- 服务器接受来自用户端的请求,接触阻塞式等待,返回一个新的socket(与欢迎socket不一样),与客户端通信
C-S之间的动作次序
- 服务器运行,并打印准备好接收
- 客户端从标准输入装置读取一行字符,发送给服务器
- 服务器从socket读取字符然后打印出来
- 客户端输入1 结束连接
Server:
import socket# 指定IP为本机IP 端口号任意指定为6666
ip_port = ('127.0.0.1', 6666)
# 最多可以连接back_log个客户端
back_log = 1
# 创建一个TCP套接字
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 对socket的配置重用ip和端口号
serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定端口号
serverSocket.bind(ip_port) # 绑定哪个ip就要运行在哪台机器上
# 设置半连接池
serverSocket.listen(back_log) # 让服务器聆听来自客户的TCP请求print('The server is ready to receive')
while 1:# 阻塞等待,创建连接connectionSocket, addr = serverSocket.accept() # 当客户敲门,创建了一个新的套接字,为这个客户服务while 1:try:msg = connectionSocket.recv(1024).decode('utf-8') # # 每次最多接收1k字节,并将报文转码if msg == '1':connectionSocket.closeprint("服务器收到消息:", msg)except Exception as e: # 异常检查break
serverSocket.close()
IP使用回环地址127.0.0.1。 127.0.0.1
是一个特殊的IP地址,表示本机地址,如果绑定到这个地址,客户端必须同时在本机运行才能连接,也就是说,外部的计算机无法连接进来。
端口号小于1024的是Internet标准服务的端口,端口号大于1024的,可以任意使用。 只要确保客户端和服务器使用的是同一组端口即可
创建Socket
时,AF_INET
指定使用IPv4协议,如果要用更先进的IPv6,就指定为AF_INET6
。SOCK_STREAM
指定使用面向流的TCP协议
listen(n)传入的值, n表示的是服务器拒绝(超过限制数量的)连接之前,操作系统可以挂起的最大连接数量。n也可以看作是"排队的数量"
Client:
import socket
# 创建客户端套接字
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 发起和服务器的TCP连接
clientSocket.connect(('127.0.0.1', 6666))
while 1:msg = input('please input')# 防止空消息if not msg:continueclientSocket.sendall(msg.encode('utf-8'))if msg == '1':break
clientSocket.close()
客户端和服务器端差别不大,就不赘述解释了
测试
三.采用UDP进行数据发送的简单程序(python)
在客户端和服务器之间没有连接
- 没有握手
- 发送端在每一个报文中明确地指定目标的IP地址和端口后
- 服务器必须从收到的分组中提取出发送端的IP和端口号
C-S之间的动作次序
- 服务器运行,并打印准备好接收
- 客户端从标准输入装置读取一行字符,发送给服务器
- 服务器将小写字母转成大写字符再发给客户端
- 客户端打印转换后的结果
Server:
from socket import *
#创建套接字
udp_ser = socket(AF_INET, SOCK_DGRAM)
#绑定端口
udp_ser.bind(('127.0.0.1', 666))
print("The UDP-server is ready to receive")
while 1:msg, adrr = udp_ser.recvfrom(1024)modmsg = msg.decode().upper()udp_ser.sendto(modmsg.encode(), adrr)
Client:
from socket import *
#创建套接字
udp_cli = socket(AF_INET, SOCK_DGRAM)
while 1:msg = input('input:')udp_cli.sendto(msg.encode('utf-8'), ('127.0.0.1', 666))data, addr = udp_cli.recvfrom(1024)print(data.decode('utf-8'))
测试
四.参考资料
1.HUN《计算机网络》实验方案
2.b站中科大郑老师的网课PPT
3.《计算机网络-自顶向下方法》
4.CSDN的优秀博主(抱歉前几天看的,忘存ID了 o(╥﹏╥)o)
五.总结
纸上学来终觉浅,绝知此事要躬行
快敲代码试试叭
【计算机网络】python——socket编程(TCP/UDP)相关推荐
- 计算机网络之Socket编程(UDP)
计算机网络通信Socket编程 实现方式:在visual studio平台上使用C#语言编写局域网上的一对一聊天程序. **原理概述:**用UDP协议实现服务器和客户端是一台电脑上的两个进程.当客户端 ...
- 网络编程—网络基础概览、socket,TCP/UDP协议
网络基础概览 socket概览 socket模块-TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...
- Python网络编程——TCP与UDP
Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制): UDP提供无连接的传输,通信前不需要建立连接. 2) TCP ...
- Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程
目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...
- tcp与udp的socket编程,udp代码实现客户端服务端,tcp代码实现客户端服务端(单线程、多线程、多进程分别实现),三次握手
socket编程 网络字节序 定义 为什么网络数据需要转换为网络字节序? Udp协议 Tcp协议 Udp的socket编程 编程流程 接口 创建套接字 绑定地址信息 发送 接收 关闭 主机字节序转换成 ...
- [Python_7] Python Socket 编程
0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*-"&qu ...
- python socket编程_Python Socket编程实现网络编程
对于有经验的开发人员来说,掌握的编程语言应该是不少的.在这些编程语言中,网络编程的应用时必不可少的.其中Python也是这样的编程语言.我们今天将会在这里为大家详细介绍一下Python Socket编 ...
- python/socket编程之粘包
python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 发 ...
- PYTHON SOCKET编程简介
原文地址: PYTHON SOCKET编程详细介绍 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Socke ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
最新文章
- SLAM本质剖析-Open3D
- Vue核心50讲 | 第四回:Vue 官方赠送的橙色装备,岂能不要
- C#SetWindowPos窗口置顶
- java html api 百度云,Javase-6.0_中文API_HTML(最新更新)
- [数据结构与算法] 单链表的简单demo
- 输错密码?这个 sudo 会“嘲讽”你
- 怎么设置某个用户生成hdfs文件的权限_管理 HDFS 服务
- FFMpeg的avcodec_send_packet/avcodec_receive_frame是异步解码
- iometer使用教程linux,Iometer磁盘测试工具中文使用说明手册 二
- 人文社科课题中计算机知识的作用,人文社科类项目申请书模板.doc
- windows操作系统定时关机和取消定时关机命令
- 编辑器,在线编辑器,微信编辑器,公众号编辑器,UEditor编辑器
- 关于无线充电的三大标准和四种实现方式的介绍
- 应用程序开发选择工具应注重运行效率还是易用性
- 明天9:00 | ECCV 2022 全球博士TalK——计算机视觉领域顶会
- JAVA算法:三角形周长(JAVA版本算法)
- 操作系统笔记整理12——磁盘存储器的管理
- 学术期刊的 LaTeX整理合集(持续更新中)
- 《Eloquent JavaScript 3rd》笔记
- 一个很NB的数学绘图工具-geogebra