Gửi bởi
tucute89
Chào các bạn.
Mình nghe nói khi dùng giao thức UDP gửi tới 1 địa chỉ BroadCast thì tất cả các host khác trong mạng sẽ nhận được gói tin này.
Mình code chương trình server thì lúc gửi bị lỗi .
Mình mong được các bạn debug và chỉ lỗi giùm . Mình xin cảm ơn [IMG]images/smilies/smile.png[/IMG]
Mã:
#include "stdafx.h"//////////////////////////////////////////////////////////////////////////using namespace std; #define MYPORT 27015 //////////////////////////////////////////////////////////////////////////VOID StartServer(){ WSAData wSock; if ( WSAStartup(MAKEWORD(2,2),&wSock) ) return ; SOCKET ServerSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); sockaddr_in sock; ZeroMemory(&sock,sizeof(sock)); sock.sin_family = AF_INET; sock.sin_port = htons(MYPORT); sock.sin_addr.s_addr = INADDR_ANY; BOOL bPer = true; ////////////////////////////////////////////////////////////////////////// int iBind = bind(ServerSocket,(sockaddr*)&sock,sizeof(sock)); cout << "
iBind: " << iBind; cout << "
SetSock: " << setsockopt(ServerSocket,SOL_SOCKET,SO_BROADCAST,(char*)&bPer,sizeof(BOOL)); CHAR szSend[MAX_PATH+1]; int iMessage = 0 , iResult; ////////////////////////////////////////////////////////////////////////// // BroadCast sockaddr_in sockClient; ZeroMemory(&sockClient,sizeof(sockClient)); sock.sin_family = AF_INET; sock.sin_port = htons(MYPORT); sock.sin_addr.s_addr = inet_addr("255.255.255.255"); while(true){ getch(); iMessage++; wsprintf(szSend,"Message #%d",iMessage); // send thu toi dia chi broad cast iResult = sendto(ServerSocket,szSend,strlen(szSend),0,(sockaddr*)&sockClient,sizeof(sockClient)); cout << "
Send: " << iResult << " Kbs"; cout << "
-------------------------------------
"; ZeroMemory(szSend,MAX_PATH); if ( iResult == -1 ){ cout << "
Error: " << WSAGetLastError(); } } closesocket(ServerSocket); WSACleanup();} //////////////////////////////////////////////////////////////////////////int _tmain(int argc, _TCHAR* argv[]){ StartServer(); getch(); return 0;}
Gỉa sử bạn đã khai báo thư viện đầy đủ.
Thì mình thấy lỗi sau.
Mã:
//////////////////////////////////////////////////////////////////////////
// BroadCast
sockaddr_in sockClient;
ZeroMemory(&sockClient,sizeof(sockClient));
sock.sin_family = AF_INET;
sock.sin_port = htons(MYPORT);
sock.sin_addr.s_addr = inet_addr("255.255.255.255");
while(true){
getch();
iMessage++;
wsprintf(szSend,"Message #%d",iMessage);
// send thu toi dia chi broad cast
iResult = sendto(ServerSocket,szSend,strlen(szSend),0,(sockaddr*)&sockClient,sizeof(sockClient)); ///Đoạn này nè
đầu tiên bạn ZeroMemory của sockClient .
và khỏi tạo sock là địa chỉ broadcast,nhưng khi send thì bạn lại send tới sockClient - mà sockClient đã zeromemory rồi.
Đúng ra fải send tới sock chứ.
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ