VC UDP接收 傳送 廣播
測試環境:
Visual Studio 2013
Windows 10
VC MFC
UDP遠端:ARM Linux C語言程式
效果:
win程式,button1單擊向192.168.168.255傳送字串:"{"Cmd":"GetDeviceInfo"}" ARM板收到返回裝置資訊
ARM板上程式列印資訊:
VC程式碼:
全域性變數
int UDP_Sock_FD = -1;// 套接字
struct sockaddr_in remote_addr;// 遠端,即要傳送到的地方
struct sockaddr_in local_addr;// 本地,本地的IP埠
初始化部分,放在程式初始化中
// 建立套接字
UDP_Sock_FD = socket(AF_INET, SOCK_DGRAM, 0);
if (UDP_Sock_FD < 0){
printf("建立套接字失敗\n");
}else{
printf("建立套接字成功%d\n", UDP_Sock_FD);
}
int optval = 1;//這個值一定要設定,否則可能導致sendto()失敗
setsockopt(UDP_Sock_FD, SOL_SOCKET, SO_REUSEADDR, (const char *)&optval, sizeof(int));
// 本地埠和地址
memset(&local_addr, 0, sizeof(struct sockaddr_in));
memset(&local_addr, 0, sizeof(local_addr));
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(1257);
local_addr.sin_addr.s_addr = INADDR_ANY;
// 目標埠和地址
memset(&remote_addr, 0, sizeof(struct sockaddr_in));
remote_addr.sin_family = AF_INET;
remote_addr.sin_port = htons(1258);
remote_addr.sin_addr.s_addr = inet_addr("192.168.168.255");//htonl(INADDR_BROADCAST);
memset(remote_addr.sin_zero, 0, sizeof(remote_addr.sin_zero));
printf("建立套接字成功%d\n", remote_addr.sin_addr.s_addr);
// 繫結
int ret = bind(UDP_Sock_FD, (struct sockaddr *)&local_addr, sizeof(struct sockaddr));
if (ret < 0){
printf("繫結失敗\n");
}else{
printf("繫結成功 %d\n", ret);
}
傳送函式,放在按鈕事件函式或其它觸發函式
int sendBytes = 0;
char msg[128] = "{\"Cmd\":\"GetDeviceInfo\"}";
if (sendBytes = sendto(UDP_Sock_FD, (char*)msg, strlen(msg), 0, (sockaddr*)&remote_addr, sizeof(remote_addr)) == SOCKET_ERROR){
printf("sendto fail, errno=%d\n", errno);
return;
}
printf("msg=%s, msgLen=%d, sendBytes=%d\n", msg, strlen(msg), sendBytes);
UDP接收部分,放線上程中
// 接收位元組數,快取定義
int recvbytes;
char recvbuf[1024];
// 接收部分,放在while中
memset(recvbuf, 0, sizeof(recvbuf));
int addrLen = sizeof(struct sockaddr_in);
if ((recvbytes = recvfrom(UDP_Sock_FD, recvbuf, 1024, 0,(struct sockaddr *)&local_addr, &addrLen)) != -1){
recvbuf[recvbytes] = '\0';
printf("Receive UDP Msg Port:%d IP:%s Messgse:%s\n", ntohs(local_addr.sin_port), inet_ntoa(local_addr.sin_addr), recvbuf);
}else{
printf("recvfrom fail\n");
}
相關文章
- Udp廣播的傳送與接收(C#+UdpClient) 上篇UDPC#client
- Udp廣播的傳送和接收(iOS + AsyncUdpSocket)下篇UDPiOS
- java傳送接收組播(多播)資料包(UDP包)JavaUDP
- SOCKET實現廣播(BoardCast)的傳送和接收 (轉)AST
- 廣播接收器——接收系統廣播
- 【測試】echo傳送和接收TCP/UDP資料包|shell 傳送TCP/UDP資料包TCPUDP
- android: 傳送自定義廣播Android
- Java網路程式設計--UDP傳送接收資料Java程式設計UDP
- iOS下的UDP廣播iOSUDP
- Java入門:UDP協議傳送/接收資料實現JavaUDP協議
- Udp接收和傳送的多執行緒進行(新手)UDP執行緒
- 兩個app間傳送廣播(動態)APP
- android: 接收系統廣播Android
- Netty 框架學習 —— UDP 廣播Netty框架UDP
- 不同的activity使用bundle物件傳值給廣播接收器物件
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- Go的Channel傳送和接收Go
- jmeter 傳送 UDP 請求,怎麼接收伺服器返回的 TCP 服務資料JMeterUDP伺服器TCP
- Android-Broadcast Receiver(廣播接收器)AndroidAST
- 安卓開發之廣播接收器BroadcastReceiver安卓AST
- PHP傳送和接收POST資料PHP
- 使用python傳送和接收郵件Python
- ROS 機器人技術 - 廣播與接收 TF 座標ROS機器人
- 廣播接收者 Receiver四大元件之一元件
- stm32之CAN傳送、接收詳解
- Android8 自定義廣播接收不到的問題Android
- 【安卓筆記】作為內部類的廣播接收者安卓筆記
- .NET Core 波場鏈離線簽名、廣播交易(傳送 TRX和USDT)筆記筆記
- js通過ajax傳送header資訊php接收JSHeaderPHP
- MPTCP 原始碼分析(四) 傳送和接收資料TCP原始碼
- Asp.net 利用Jquery Ajax傳送和接收DataTableASP.NETjQuery
- 使用python傳送郵件和接收郵件Python
- Flutter多個頁面廣播通知傳值Flutter
- 碰過嗎?Laravel 廣播,前端接收幾次後就 CPU 100%Laravel前端
- 關於VC++中,兩種自定義訊息的傳送與接收的方法實現進行說明。 (轉)C++
- 廣播模式模式
- C/C++ 運用Npcap傳送UDP資料包C++PCAUDP
- 一有不慎,廣泛傳播,坑爹啊