本文學習相關資料:
C/C++ socket編程教程
環境:vs2015
源碼:本文代碼
這次來看看UDP
之前在c++ socket學習(1.2)講過UDP怎麼發送了,那現在來做一個可以一直髮送的。
這次沒有什麼接收端和發送端了,畢竟誰發送誰就是發送端,誰接受就是接收端
先發送數據的叫發送端,先接收的叫接收端(使用bind函數的)
接收端
//前面省略了
bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
while (1) {
//udp接收信息,先收爲敬
int recvlen = recvfrom(servSock, buf, readlen, 0,(sockaddr*)&clntAddr, &nSize);
if (strcmp(buf, "exit") == 0) {
break;
}
std::cout << clntAddr.sin_port << " " << "收到的信息是:" << buf << std::endl;
//將接收的數據處理一下,再發回去
buf[recvlen / 2] = 0;
sendto(servSock, buf, recvlen, 0, (sockaddr*)&clntAddr, nSize);
}
發送端
int nSize = sizeof(sockaddr);
while (1) {
std::string sendMessage;
std::cout << "輸入要發送的內容(輸入exit結束):";
std::cin >> sendMessage;
sendto(client, sendMessage.c_str(), sendMessage.size() + 1, 0, (sockaddr*)&servAddr, sizeof(sockaddr));
if (sendMessage.compare("exit") == 0) {
break;
}
recvfrom(client, buf, readlen, 0, (sockaddr*)&servAddr, &nSize);
std::cout << "我收到了接收端的:" << buf << std::endl;
}
接收端要綁定了,才能收到發送端的信息
那麼發送端沒有綁定啊,是怎麼接收到接收端處理過的信息呢?
原來發送端在調用sendto的時候,就需要一個IP地址和端口,程序沒有指明的話就由系統自己來分配了。
接收端可以通過recvfrom獲得了發送端的IP地址和端口,照着發回去就好了。