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介紹及UDP傳送端和接收端廣播程式碼UDP
- 0229-UDP 傳送和接收UDP
- 【測試】echo傳送和接收TCP/UDP資料包|shell 傳送TCP/UDP資料包TCPUDP
- 廣播接收器——接收系統廣播
- Java網路程式設計--UDP傳送接收資料Java程式設計UDP
- Udp接收和傳送的多執行緒進行(新手)UDP執行緒
- Java入門:UDP協議傳送/接收資料實現JavaUDP協議
- Netty 框架學習 —— UDP 廣播Netty框架UDP
- 0230-TCP 傳送和接收TCP
- Go的Channel傳送和接收Go
- jmeter 傳送 UDP 請求,怎麼接收伺服器返回的 TCP 服務資料JMeterUDP伺服器TCP
- Android-Broadcast Receiver(廣播接收器)AndroidAST
- 排查MQ訊息傳送和接收MQ
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- golang接收alertmanager的告警併傳送釘釘Golang
- C/C++ 運用Npcap傳送UDP資料包C++PCAUDP
- http tcp udp json 接收測試HTTPTCPUDPJSON
- Android8 自定義廣播接收不到的問題Android
- ROS 機器人技術 - 廣播與接收 TF 座標ROS機器人
- axios傳送post請求,request.getParamter接收不到iOS
- .NET Core 波場鏈離線簽名、廣播交易(傳送 TRX和USDT)筆記筆記
- 使用postman傳送資料,springmvc接收資料的問題PostmanSpringMVC
- 利用ASP傳送和接收XML資料的處理方法XML
- BGP檢視從鄰居接收/傳送的路由資訊路由
- Java入門:TCP協議傳送/接收資料實現JavaTCP協議
- 碰過嗎?Laravel 廣播,前端接收幾次後就 CPU 100%Laravel前端
- 使用Spring Integration接收TCP與UDP請求SpringTCPUDP
- java中UDP接收資料的步驟JavaUDP
- 網路核心之TCP是如何傳送和接收訊息的TCP
- Flutter多個頁面廣播通知傳值Flutter
- msmq在Internet上訪問的問題(只能傳送,不能接收)MQ
- 網路程式設計之 Udp接收資料程式設計UDP
- springboot使用RabbitMQ的fanout廣播模式消費者死活接收不到訊息Spring BootMQ模式
- 用張量廣播機制實現神經網路反向傳播神經網路反向傳播
- 正向傳播和反向傳播反向傳播
- 如何在Node.js的httpServer中接收前端傳送的arraybuffer資料Node.jsHTTPServer前端
- 玩轉 PHP 網路程式設計全套之資料接收與傳送PHP程式設計
- Android透過接收UDP訊息改寫程式配置AndroidUDP