Socket通信
UDP/TCP上下位机通信相关知识
skye_fly
这个作者很懒,什么都没留下…
展开
-
网络IO(BIO,NIO,AIO,Selector,epoll)
内核与用户空间传输数据时的两处阻塞:内核与用户线程传输数据时先建立一条socket连接,之后存在两处阻塞:第一处就是内核要从磁盘读取数据,然后才能进行传输(BIO);第二处就是当内核与用户线程有很多socket连接时,需要判断哪条连接上已经准备好传输数据了(NIO)。一、BIO:只适用于连接数少的情况两处阻塞都存在,用户线程与内核建立连接后,用户线程阻塞等待内核从磁盘获取数据,然后等待内核与用户线程间的socket链路完成数据传输。二、NIO:适用于连接数多,每条连接传输的数据量少的情况s原创 2021-08-31 22:19:15 · 243 阅读 · 0 评论 -
Python开发智能移动小车平台上位机
智能移动小车平台上位机界面设计告一段落,特此记录一下整体的框架,以免之后再用的时候回忆不起来。一、地图获取路径数据:1、首先通过奥维地图绘制从起点到终点的多条路径,然后根据最优路径选择算法(此处选用分支界限算法,简化实际地图为有向有权图),选取距离最短的路径(两点间的权重为真实两点间的距离),或者用时最短的路径(通过改变两点间的权重模拟路段的拥堵情况)或者途径红绿灯最少的路径(两点间权重都改为1)。2、得到最优路径后,在奥维地图上导出该路径上的经纬度点(最小间距是每0.5米一个经纬度点),为了提高精度原创 2020-11-25 12:54:05 · 1999 阅读 · 7 评论 -
python socket接收c传输的字节流数据时遇到的“字节对齐”问题struct.error: unpack requires a buffer of 35 bytes
python和c通过socket进行数据传输时,会用到pack和unpack包来进行数据的打包和解包,对于不同类型的数据往往会存在一个“字节对齐”问题:struct.error: unpack requires a buffer of 35 bytes比如在一字节Byte型变量和八字节double型变量的中间可能会插入四个字节的0x00来自动对齐字节长度。可以看到接收程序源代码如下:dataFromCar_jingwei_from_car =client.recv(36)y11, y12, y原创 2020-11-08 09:58:50 · 2723 阅读 · 0 评论 -
C语言与Python平台通过socket建立结构型方式数据传输通信(使用struct.pack())
解决的问题:1)Python与C跨平台通信(结构型数据传输方式)2)接收端无故多出0x00字节TCP/IP协议下,主要有两种通信方式:1、字符流:字符串形式,没有平台不一致问题,但传输的数据不定长,复合数据类型(如struct)的解析不方便;2、结构型:按数据类型传输,保证数据长度固定/可控,方便对接受到数据的解析;但前提是要考虑平台不一致问题,如字节序、对齐位宽、数据类型等。本文采用Python平台编写上位机,C编写下位机,并且按照结构型传输数据,为了将数据转化成在内存中的二进制串结构体数据(C原创 2020-09-25 09:42:37 · 1461 阅读 · 0 评论 -
TCP多任务通信
TCP多任务通信(同一个Server同时为多个Client服务)多任务概念一、单核CPU二、多核CPU(1) 并行(真正的多任务)(2)并发 (虚假的多任务)一、单核CPU: 同一时间只能处理一个程序,当存在多个程序时,CPU每0.000001s(假设极短时间)依次运行一个程序,循环往复,离散近似为连续(称为:时间片轮转)二、多核CPU:(1) 同一时间一个CPU只能运行一个程序,当程序少于CPU核数时为真正的同时执行多任务。(称为:并行)(2) 当程序多于CPU核数时为假的多任务。(原创 2020-09-18 15:52:25 · 353 阅读 · 0 评论 -
python编写TCP通信
一、TCP客户端(Client)二、TCP服务器(Server)一、TCP_Client:1.创建套接字2.链接服务器(sendto里面的to, tcp为打电话模型,首先且只需拨通一次号码)3.发送数据(sendto 里面的send, 无需加收件方地址)4.关闭套接字# TCP_client learningimport socketdef main(): # 1.创建socket tcp_socket=socket.socket(socket.AF_INET,socket.SO原创 2020-09-18 15:45:46 · 1291 阅读 · 0 评论 -
使用python实现UDP通信
1.打开虚拟通信程序,选择UDP通信并选定收发数据的ip地址和port端口:2.在虚拟机中编写python程序与主机中的虚拟通信程序实现数据传输:# 注释的标注格式为:每行开头则直接输入#并空一格开始注释# 若在每行代码后面加注释,则空两格输入#再空一格开始注释import socket# 使用udp收发数据def main(): # 1.创建socket套接字 udp_socket = socket.socket(socket.AF_INET, sock.SOCK_DGRAM)原创 2020-09-17 16:02:07 · 3920 阅读 · 0 评论