Visual C++設計UDP協議通訊示例
一、緒言
UDP是一種面向非連線,不可靠的通訊協議,相對於TCP來說,雖然可靠性不及,但傳輸效率較高。所以在網路上仍有很大的用途。這幾日需要了解下udp通訊的過程,上網發現這方面的資料還挺少。於是仔細的翻找了下msdn,基本上搞清楚了udp通訊的過程。做了一個測試的例子。希望對大家有幫助。
二、UDP的通訊過程
server端: open a socket(socket)--->name the socket(bind)--->send and receive data(sendto recvfrom)--->close socket(closesocket)
client端: open a socket(socket)---------------------------->send and receive data(sendto recvfrom)--->close socket(closesocket)
server端無需listen,client端無需connect,因此udp中server和client的區別相對較模糊。只要呼叫sendto和recvfrom就可以給指定的地址收發資料,但並不保證收發的資料的完整性和可靠性。
三、示例
udpserver主要程式碼:
UDP是一種面向非連線,不可靠的通訊協議,相對於TCP來說,雖然可靠性不及,但傳輸效率較高。所以在網路上仍有很大的用途。這幾日需要了解下udp通訊的過程,上網發現這方面的資料還挺少。於是仔細的翻找了下msdn,基本上搞清楚了udp通訊的過程。做了一個測試的例子。希望對大家有幫助。
二、UDP的通訊過程
server端: open a socket(socket)--->name the socket(bind)--->send and receive data(sendto recvfrom)--->close socket(closesocket)
client端: open a socket(socket)---------------------------->send and receive data(sendto recvfrom)--->close socket(closesocket)
server端無需listen,client端無需connect,因此udp中server和client的區別相對較模糊。只要呼叫sendto和recvfrom就可以給指定的地址收發資料,但並不保證收發的資料的完整性和可靠性。
三、示例
udpserver主要程式碼:
void main() { SOCKET socket1; InitWinsock(); struct sockaddr_in local; struct sockaddr_in from; int fromlen =sizeof(from); local.sin_family=AF_INET; local.sin_port=htons(1000); ///監聽埠 local.sin_addr.s_addr=INADDR_ANY; ///本機 socket1=socket(AF_INET,SOCK_DGRAM,0); bind(socket1,(struct sockaddr*)&local,sizeof local); while (1) { char buffer[1024]="\0"; printf("waiting for message from others-------------\n"); if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR) { printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer); ////給cilent發資訊 sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen); } Sleep(500); } closesocket(socket1); } |
udpcilent主要程式碼:
void main() { SOCKET socket1; InitWinsock(); struct sockaddr_in server; int len =sizeof(server); server.sin_family=AF_INET; server.sin_port=htons(1000); ///server的監聽埠 server.sin_addr.s_addr=inet_addr("168.168.0.10"); ///server的地址 socket1=socket(AF_INET,SOCK_DGRAM,0); while (1) { char buffer[1024]="\0"; printf("input message\n"); scanf("%s",buffer); if (strcmp(buffer,"bye")==0) break; if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR) { if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len) != SOCKET_ERROR) printf("rece from server:%s\n",buffer); } } closesocket(socket1); } |
四、結束語
UDP通訊比TCP簡單了很多,在資料可靠性不是很高的情況下,有使用的價值。
相關文章
- 通訊協議:HTTP、TCP、UDP協議HTTPTCPUDP
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- 網路程式設計UDP協議方式程式設計UDP協議
- QT使用 http 協議通訊的實現示例QTHTTP協議
- 通訊協議協議
- C# wm6透過udp協議和pc通訊C#UDP協議
- 【網路協議】UDP協議協議UDP
- 無線通訊協議設計的幾點要素協議
- Android與物聯網裝置通訊-UDP&TCP協議AndroidUDPTCP協議
- Redis 通訊協議Redis協議
- HTTP通訊協議HTTP協議
- Mysql通訊協議MySql協議
- MQ通訊協議MQ協議
- web通訊協議Web協議
- 在C++ Builder中用socket api來寫網路通訊程式(同時支援TCP和UDP協議)C++UIAPITCPUDP協議
- Android程式設計師必知必會的網路通訊傳輸層協議——UDP和TCPAndroid程式設計師協議UDPTCP
- 如何設計一個好的通訊網路協議協議
- Java網路程式設計UDP通訊原理Java程式設計UDP
- iOS 網路程式設計(二)UDP協議小結iOS程式設計UDP協議
- 基於UDP協議的Socket網路程式設計UDP協議程式設計
- 在C++ Builder中用socket api來寫網路通訊程式(同時支援TCP和UDP協議) (轉)C++UIAPITCPUDP協議
- 網路通訊協議協議
- Dubbo-通訊協議協議
- 串列埠通訊協議串列埠協議
- UDP協議詳解UDP協議
- TCP和UDP協議TCPUDP協議
- Socket:UDP協議小白UDP協議
- 網路通訊協議-ICMP協議詳解!協議
- 網路通訊協議-TCP協議詳解!協議TCP
- 網路通訊協議-HTTP協議詳解!協議HTTP
- 網路通訊協議-SMTP協議詳解!協議
- 網路程式設計協議(TCP和UDP協議,黏包問題)以及socketserver模組程式設計協議TCPUDPServer
- 基於Netty實現自定義訊息通訊協議(協議設計及解析應用實戰)Netty協議
- 輕量通訊協議 --- MQTT協議MQQT
- HTTP協議的通訊框架HTTP協議框架
- WLAN常用的通訊協議協議
- 15. SPI通訊協議協議
- IIC通訊協議筆記協議筆記