Code:my dialog procedure: BOOL CALLBACK MainDiaProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_INITDIALOG: { start_listen(dia_hwnd); } break; case SOCKET_READY: { MessageBox(dia_hwnd, "I GOT MSG!!", "YOU ARE FLOODING!",MB_ICONEXCLAMATION | MB_OK); switch (LOWORD(wParam)) { case FD_READ: recv(listen_socket, recv_buff, sizeof(recv_buff),0); break;} } // and so on
the following is the function i use to create a listening socket.
i called the function "start_listen(dia_hwnd);" on initialize of the dialog box to get a socket listening.
Code:char recv_buff[600]; SOCKET listen_socket ; char *start_listen(HWND what_hwnd) { // Declaring a buffer on the stack //char *buffer = new char[256]; // or on the heap WSAAsyncSelect(listen_socket, what_hwnd, SOCKET_READY,FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT ); // i put this into WSAAsyncSelect mode) WSADATA wsaData; WORD sockVersion = MAKEWORD(1, 1); int nret; SOCKADDR_IN serverInfo ; ZeroMemory(recv_buff, 600); WSAStartup(sockVersion, &wsaData); serverInfo.sin_family = AF_INET; serverInfo.sin_addr.s_addr = INADDR_ANY; serverInfo.sin_port = htons(9000); listen_socket = socket(AF_INET, // Go over TCP/IP SOCK_DGRAM, IPPROTO_UDP);// Use UDP nret = bind(listen_socket, (LPSOCKADDR)&serverInfo, sizeof(struct sockaddr)); if (listen_socket == INVALID_SOCKET) { nret = WSAGetLastError(); ReportError(nret, "socket()"); WSACleanup(); return "ERR:Bind"; } nret = listen(listen_socket, 30); if (nret == SOCKET_ERROR) { return "ERR:C NO RECV"; } ZeroMemory(recv_buff, 503); }
here is the function i use to send UDP packet
i call this function using "enterhost("localhost","hello! testing", hwnd);" on a test button on the dialogCode:char *enterhost(char *hostname , char *full_msg, HWND hwnd) { // Declaring a buffer on the stack //char *buffer = new char[256]; // or on the heap char buffer[600]; WSADATA wsaData; WORD sockVersion = MAKEWORD(1, 1); LPHOSTENT hostEntry ; int nret; SOCKADDR_IN serverInfo ; SOCKET sending_socket ; ZeroMemory(buffer, 600); strcpy(buffer, full_msg); WSAStartup(sockVersion, &wsaData); hostEntry = gethostbyname(hostname); // put hostname here! if (!hostEntry) { nret = WSAGetLastError(); ReportError(nret, "gethostbyname()"); // Report the error as before WSACleanup(); return "ERR:hostbyname"; } serverInfo.sin_family = AF_INET; serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list); serverInfo.sin_port = htons(9000); sending_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Use TCP rather than UDP nret = bind(sending_socket, (LPSOCKADDR)&serverInfo, sizeof(struct sockaddr) ); if (nret == INVALID_SOCKET) { nret = WSAGetLastError(); ReportError(nret, "socket()"); WSACleanup(); return "ERR:Bind"; } // nret = send(sending_socket, buffer, strlen(buffer), 0); sendto(sending_socket, buffer,600,0, (SOCKADDR *) &serverInfo, sizeof(serverInfo)); // now which of these to use? if (nret == SOCKET_ERROR) { return "ERR:C NO RECV"; } ZeroMemory(buffer, 503); shutdown(sending_socket,3); closesocket(sending_socket); WSACleanup(); }
now the problem is it seems like there is no callback message received when i press the test button
using
vc++6.0
win98
API style of coding( dunno MFC)
and have #include winsock2 with it's lib
#pragma comment(lib, "Ws2_32.lib")



LinkBack URL
About LinkBacks


