上位机socket 通信 编程(mfc)
来源:互联网 发布:房屋格局设计软件 编辑:程序博客网 时间:2024/06/05 16:21
/*
*软件:vs2005
*目标:实现socket通信代替原有的串口
*协议:udp
*本文只是记载开发过程中的小细节与遇到的问题
*/
**************************************
INT_PTR nRes;
CChose chose;
nRes = chose.DoModal();
if (IDD_CHOSE == nRes)
return;
************************************** //弹出窗口-------mark
本人选择创建socket的方式不是用Windows的API,是用C写的库,封装成一个类,因为win的API的接口不是很方便,刚好自己也有一个项目就做成库了,
使用起来感觉还不错。
***
UDP通信流程:
接下来是自己写一个小代码(服务器):
PS:以下代码只是示范
// 1,创建一个UDP套接字
int fd = Socket(AF_INET, SOCK_DGRAM, 0);
// 2,绑定 IP + PORT
struct sockaddr_in srvaddr;
socklen_t len = sizeof(srvaddr);
bzero(&srvaddr, len);
srvaddr.sin_family = AF_INET;
srvaddr.sin_addr.s_addr = htonl(INADDR_ANY); // 自动获取本机任意一个IP
srvaddr.sin_port = htons(atoi(argv[1])); // 从命令行手工指定
Bind(fd, (struct sockaddr *)&srvaddr, len);
char msg[SIZE];
struct sockaddr_in cliaddr;
bzero(msg, SIZE);
bzero(&cliaddr, sizeof(cliaddr));
recvfrom(fd, msg, SIZE, 0,(struct sockaddr *)&cliaddr, &len);
receive和send的超时设置:
int time_rcv=10000;//10s
int time_send=10000;//10s
int error_rcv=setsockopt(socket1, SOL_SOCKET,SO_RCVTIMEO, (char *)&time_rcv,sizeof(time_rcv));
int error_send=setsockopt(socket1, SOL_SOCKET,SO_SNDTIMEO, (char *)&time_send,sizeof(time_send));
作为上位机,功能上是主动的发送命令,所以可以把rcv的上层封装改为先sand一个带命令的空包然后再rcv。//**因软件需求而异
注意在不同的主机上进行通信,必须要注意字节序,可以使用网络字节序进行中转。
例如:htons(atoi(argv[1]));
接下来是c++里的数据类型问题:
CString char srting
1.char ->CString
char b[]={"test"};
CString p;
p=b;
2.sting->char
string p;
p="test";
char b[5]
p.copy(b,p.length(),0);
3.CString ->char
CString p;
char b[50];
p="test";
for(int i=0;i<p.GetLength();i++){
b[i]=p.GetAt(i)
}
*************************************************
char 型数组的倒序函数:
strrev(char *)
两个CString 的比较函数:
CString p,o;
int i=p.Compare(o);
返回0相等
两个CString是否为子数组函数:
CString o,p;
int i=p.Find(o)
返回-1表示p里没有o这个字符串
对内存操作的函数:
memset();//常用清零
memcpy();//复制
memcpy_s();//从n字节开始复制datalen长度
对于网络通信,肯定有IP地址,在MFC中,有IP地址的控件,对于怎么把从控件输入的IP转成char型数组:
char buf[50];
BYTE f1, f2, f3, f4;
m_pIPaddress.GetAddress(f1, f2, f3, f4);
m_strIp.Format(("%d.%d.%d.%d"), f1, f2, f3, f4);//IP转换成字符串StringA
strcpy(buf, m_strIp.GetString());
//m_pIPaddress为控件变量//m_strIp为StringA类变量
数组连接问题:
1 两个CString 连接:
CString o,p;
o=o+p;
2 两个char连接
char b[],h[];
sprintf(b,"%s%s"b,h);
--------------------------------------------------------------------------------------------------------------------------
希望对读者帮助
交流方式:274598809@qq.com
----------------------------------------------------------------------------------------------------------------------------
- 上位机socket 通信 编程(mfc)
- mfc串口通信上位机
- MFC/基于对话框的MFC上位机串口通信(C++实现)简单例程
- VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程
- VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程
- 基于MFC的socket编程(异步非阻塞通信)
- 基于MFC的socket编程(异步非阻塞通信)
- 基于MFC的socket编程(异步非阻塞通信)
- 【Java上位机】(一)串口通信
- 上位机串口通信
- PMAC上位机编程
- MFC开发上位机经验
- vs2013 MFC 串口上位机
- 上位机-串口通信-C#
- WiFi通信上位机实现
- vc--基于mfc的上位机设计(一)
- mfc socket udp通信
- MFC-Socket通信
- Hbase读写优化
- Linux 查看进程中的线程、及其状态信息
- ELK(5.0) 初学搭建部署
- django框架(一) 基于logging的sigton实现
- 程序设计实训报告-歌手大奖赛计分程序
- 上位机socket 通信 编程(mfc)
- ubuntu eclipse启动卡死,脚本释放内存
- cp 快捷命令:复制文件到多个目录
- SpringMVC架构下form表单无法从JS里提交参数到后台,且后台无反应
- 程序设计:小学生考试系统(二)
- skynet 学习之旅
- 中国CIO最关心的八大问题(上)
- IntelliJ IDEA 快捷键和设置
- Android任务和返回栈完全解析,细数那些你所不知道的细节