C++与C# UDP通信实例(同一台PC)
对于同一个PC机而言,服务器端和客户端在一个PC机上面,端口必须要不一样,不然会冲突。
你总不能自己又当爹又当妈吧。
所以在进行程序设计的时候,需要考虑这一点:
在此接口设计中,C++当作UDP的服务器端
程序设计如下:
- WSADATA wsaData = {0};
- SOCKET socksvr;
- int iPort=7900;
- //服务器地址长度
- int iLen = 0;
- //接收数据的缓冲
- int iSend = 0;
- int iRecv = 0;
- if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
- {
- printf("Failed to load Winsock.\n");
- return 0;
- }
- struct sockaddr_in ser;
- ser.sin_family=AF_INET;
- ser.sin_port=htons(8299);
- ser.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
- //建立服务端数据报套接口
- socksvr=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
- //udp绑定
- bind(socksvr,(struct sockaddr*)&ser,sizeof(ser));
- //客户端信息地址,这里是点对点通信,需要加上IP+port。
- //对于UDP来说,可以不用IP,因为它是无连接的。只要在一个网段就行。
- //也就是说,无论是TCP还是UDP,都可以指定向某个电脑的端口发送数据。
- //只需要在客户端监听此端口就行。对于TCP:connect,对于UDP:listen
- struct sockaddr_in clientaddr = {0};
- clientaddr.sin_family=AF_INET;
- clientaddr.sin_port=htons(8300);//7901
- clientaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
- int nLen = sizeof(clientaddr);
- Sleep(10);
- string cam_dir = "C:\\CameraData";
- mkdir(cam_dir.c_str());
- while(1)
- {
- matrix.Num = 0;
- matrix_vehicle.Num = 0;
- if (0)//imgs_lane.isNew || imgs_pedestrain.isNew || imgs_vehicle.isNew
- {
- matrix = imgs_lane.Get();
- pe = imgs_pedestrain.Get();
- matrix_vehicle = imgs_vehicle.Get();
- //行人有宽度信息,所以需要增加的不止一个点
- matrix.point[matrix.Num++] = pe;//增加行人,若没有,其标志位为0
- if (matrix_vehicle.Num > 1) //增加车辆,若没有,其标志位为0
- {
- for (int i = 0; i < matrix_vehicle.Num; ++i)
- {
- matrix.point[matrix.Num++] = matrix_vehicle.point[i];
- }
- }
- if(matrix.Num > 0)
- {
- int ret = sendzmq->PubMsg("Camera_Data",matrix);
- //int len = matrix.Num*sizeof(Point) + 4;
- //sendudp->udpSendToCanet((unsigned char*)&matrix,len);
- //cout << "ret num: " << ret << endl;
- }
- }
- IplImage* demo = imgs_gray.Get();
- //存储图片
- //数据独立存储
- char szFileName[_MAX_PATH] = {0};
- SYSTEMTIME sys;
- GetLocalTime(&sys);
- long cntTime = sys.wHour*60*60*1000 + sys.wMinute*60*1000 +\
- sys.wSecond*1000 + sys.wMilliseconds;
- sprintf(szFileName, "%ld",cntTime);
- string dir = cam_dir + "\\";
- string tenp = "";
- tenp = szFileName;
- tenp += ".jpg";
- dir += tenp;
- //cvSaveImage 第三个参数可以设置压缩的质量
- int
params[3]; - params[0] = CV_IMWRITE_JPEG_QUALITY;
- params[1] = 85;
- params[2] = 0;
- cvSaveImage(dir.c_str(),demo,params);
- Sleep(1);
- iSend=sendto(socksvr,dir.c_str(),dir.size(),0,(struct sockaddr*)&clientaddr,nLen);
- cout << "ret: " << iSend << endl;
- Sleep(100);
- }
- return 0;
- }
用此保存后在读取图片的方式可以将300多K的数据压缩至20K。大大减少数据量,基本上是20倍。
对于C#端,我们只需要接收固定端口的数据即可:
程序代码设计如下:
- private
const
int listenPort = 8300; - static
void Main(string[] args) - {
- UdpClient listener = new UdpClient(listenPort); //本机侦听的端口号实例化
- IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); //实例化
- while (true)
- {
- byte[] bytes = listener.Receive(ref groupEP);
- string str = System.Text.Encoding.Default.GetString(bytes);
- }
- }
基本设计完毕。
实现的功能:从C++当中将图片的存储路径发到C#端。
C++与C# UDP通信实例(同一台PC)的更多相关文章
- VC++使用socket进行TCP、UDP通信实例总结
1. 两台计算机通信需要协议,通信的两台计算机IP必须唯一 2. 同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一 ...
- 套接字、UDP通信、TCP通信、TCP/IP协议簇
一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...
- 【.NET类库】通过SharpSocket进行TCP/UDP通信数据传输
类库作用: 用于基于TCP/UDP协议的数据通信,调用简单,高效. 封装了和业务无关的底层细节,让开发人员可以专注于做业务 完善的示例代码: 针对类库的几种用法,都提供了较为详细的示例代码 一.TCP ...
- [C语言]一个很实用的服务端和客户端进行UDP通信的实例
前段时间发了个TCP通信的例子,现在再来一个UDP通信的例子.这些可以作为样本程序,用到开发中.“裸写”socket老是记不住步骤,经常被鄙视…… 下面的例子很简单,写一个UDP的server用于收包 ...
- Linux下简单的socket通信实例
Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...
- C#之UDP通信
简介 C#中的udp通信关键类:Udpclient,它位于命名空间System.Net.Sockets中,发送接收都是UdpClient类, 命名空间 using System.Net.Sockets ...
- 等待唤醒机制,UDP通信和TCP通信
等待唤醒机制 通过等待唤醒机制使各个线程能有效的利用资源. 等待唤醒机制所涉及到的方法: wait() :等待,将正在执行的线程释放其执行资格 和 执行权,并存储到线程池中. notify():唤醒, ...
- 微信小程序UDP通信
前言 UDP通信分为单播 广播 组播,基础库2.7.0之后,小程序开始支持UDP通信,目前小程序只支持单播. 小程序API 小程序UDP通信这一块可以说是很简单了就一个UDPSocket实例.然后bi ...
- 网络通信协议、UDP通信、TCP通信
网络通信协议 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议,它是一个包括TCP协议和IP协议,UDP协议和其它一些协议的协议组. IP地址和端口号 目前,IP地址广泛使用的版本是IPv4, ...
随机推荐
- REST服务介绍二
之前一篇文章写过REST服务介绍, 今天再次来自回顾一下. REST是一种架构风格. 首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是 HTTP 规范 ...
- Lind.DDD.ConfigConstants统一管理系统配置
回到目录 Lind.DDD.ConfigConstants属于新添加的组件,用来帮助我们安全的进行配置消息的管理,我们在开发项目时,有个感觉,你的config配置项会越来越多,越来越难以阅读,随着你引 ...
- Lind.DDD.Events领域事件介绍
回到目录 闲话多说 领域事件大叔感觉是最不好讲的一篇文章,所以拖欠了很久,但最终还是在2015年年前(阴历)把这个知识点讲一下,事件这个东西早在C#1.0时代就有了,那时学起来也是一个费劲,什么是委托 ...
- Deployment options
Play applications can be deployed virtually anywhere: inside Servlet containers, as standalone serve ...
- CSS中Position 的用法详解。
记得一年前,到一家公司面试的时候,问我position有哪几个属性,我憋半天才回答出2个,大家估计都清楚,就是我们经常用到的2个(relative,absolute). 最近又用到了好多,深入研究了下 ...
- sharepoint报HRESULT:0x80131904的错误的原因和解决方法
在新建文件库的时候出现的.下上传文件和更改权限,都是在报这个HRESULT:0x80131904的错误,基本所有操作都报同一个错误,如下图: 错误原因 这个问题其实就是:sharepoint配置文件( ...
- SharePoint 2013 入门教程之入门手册
当我们搭建完环境,创建应用程序和网站集后,就已经正式开启了我们的SharePoint之旅了,进入网站以后,开始基本的使用.设置,了解SharePoint相关特性,下面,来简单了解下SharePoint ...
- iOS - 对OOA、OOD、OOP的理解
很多人在求职的时候,会遇到一个这样的问题:“对OOD/OOP有较深的理解”,这个时候有人就会问OOD.OOP是什么呢?那么今天咱们就一块来看一下OOA.OOD.OOP到底是什么! (一)OOA--面向 ...
- Nagios学习实践系列——配置研究[监控当前服务器]
其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...
- CLR via C# 读书笔记---常量、字段、方法和参数
常量 常量是值从不变化的符号.定义常量符号时,它的值必须能在编译时确定.确定后,编译器将唱两只保存在程序集元数据中.使用const关键字声明常量.由于常量值从不变化,所以常量总是被视为类型定义的一部分 ...