void MainWindow::on_sendBtn_clicked() { QFile *file = new QFile(QFileDialog::getOpenFileName(this, tr("Pick A Song To Send"), 0, tr("Music (*.wav)"))); if (file->exists()) { file->open(QIODevice::ReadOnly); ClientSend((HANDLE) _get_osfhandle(file->handle())); } }
void CLevel::net_Update () { if(game_configured){ // If we have enought bandwidth - replicate client data on to server Device.Statistic->netClient2.Begin (); ClientSend (); Device.Statistic->netClient2.End (); } // If server - perform server-update if (Server && OnServer()) { Device.Statistic->netServer.Begin(); Server->Update (); Device.Statistic->netServer.End (); } }
DWORD WINAPI ClientControlThreadSend(LPVOID lpParameter) { char *sendbuff = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char)); char *recvbuff = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char)); char *message = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char)); int flag = (int)lpParameter; int sentb = 0, recvb = 1, totalb = 0, i = 0; wchar_t path[260]; switch (flag) { case GET_UPDATE_SONG_LIST: memset(recvbuff, 0, sizeof(recvbuff)); memset(message, 0, sizeof(message)); sendbuff[0] = flag; sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0); numSongs = 0; songRequestDone = 0; while(recvb != SOCKET_ERROR) { recvb = recv(controlSock, recvbuff, CONTROL_PACKET_SIZE, 0); strcat(message, recvbuff); totalb += recvb; if (totalb >= CONTROL_PACKET_SIZE) { if (message[0] == 0) { break; } songList[i] = new char[100]; strcpy(songList[i], message); i++; numSongs++; totalb -= CONTROL_PACKET_SIZE; memset(message, 0, sizeof(message)); } } songRequestDone = 1; break; case SEND_SONG_TO_SERVER: sendbuff[0] = flag; strcat(sendbuff, sendFileName); sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0); while(totalb < CONTROL_PACKET_SIZE && recvb != SOCKET_ERROR) { recvb = recv(controlSock, recvbuff, CONTROL_PACKET_SIZE, 0); totalb += recvb; } if (recvbuff[0] == 0) { sendSockClosed = ClientSendSetup(address, sendSock, SERVER_DEFAULT_PORT); ClientSend(hSendFile); } break; case GET_SONG_FROM_SERVER: sendbuff[0] = flag; strcat(sendbuff, recvFileName); mbstowcs(&path[0], recvFileName, strlen(recvFileName)); qDebug() << recvFileName; qDebug() << QString::fromWCharArray(path); DeleteFile(path); hReceiveFile = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); ShowLastErr(false); hReceiveClosed = 1; ClientReceiveSetup(listenSock, CLIENT_DEFAULT_PORT, acceptEvent); ClientListen(); sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0); break; default: qDebug() << "Invalid request"; break; } free(sendbuff); free(recvbuff); free(message); return TRUE; }
//--------------------------------------------------------------------------- // FUNCTION: void DoRnrClient (int nServiceType, char * pszServerName, DWORD dwNameSpace) // // PURPOSE: Given the service type id "nServiceType", the server instance name // "pszServerName" and the name space to query "dwNameSpace", // perform name resolution to the server and send a message to it. // If "nServiceType" is some known SAP Id such as Print Queue (3), // File Server (4), Job Server (5), Print Server (7), Archive // Server (9), Remote Bridge Server (36) or Advertising Print Server // (71), it will not send a message to the server. //--------------------------------------------------------------------------- void DoRnrClient (int nServiceType, char * pszServerName, DWORD dwNameSpace) { static GUID guid = SVCID_NETWARE ( nServiceType ); //use this as the class id WSAQUERYSET qs = {0}; AFPROTOCOLS afp[g_nMaxNumOfSocks] = {{AF_IPX, NSPROTO_IPX}, {AF_INET, IPPROTO_UDP}, {AF_INET6, IPPROTO_UDP}}; HANDLE hLookup = NULL; DWORD dwResult = 0; static char szName[100] = {'\0'}; BOOL fKnownSapId = FALSE; DWORD dwLength = 0; BYTE abyBuf[sizeof(WSAQUERYSET) + OFFSET] = {0}; // provide a sufficient large // buffer for returned query set WSAQUERYSET * pQS = (WSAQUERYSETA*) abyBuf; HRESULT hRet; if(FAILED(hRet = StringCchCopy(szName, sizeof(szName)/sizeof(szName[0]), pszServerName ))) { printf("StringCchCopy failed: 0x%x\n",hRet); return; } SecureZeroMemory (&qs, sizeof (WSAQUERYSET)); qs.dwSize = sizeof (WSAQUERYSET); qs.lpszServiceInstanceName = szName; qs.lpServiceClassId = &guid; qs.dwNameSpace = dwNameSpace; qs.dwNumberOfProtocols = g_nMaxNumOfSocks; qs.lpafpProtocols = afp; SecureZeroMemory (abyBuf, sizeof (WSAQUERYSET) + OFFSET); dwLength = sizeof(WSAQUERYSET) + OFFSET; // some well known SAP name space services if (nServiceType == 3 || nServiceType == 4 || nServiceType == 5 || nServiceType == 7 || nServiceType == 9 || nServiceType == 36 || nServiceType == 71) fKnownSapId = TRUE; if (WSALookupServiceBegin ( &qs, LUP_RETURN_ADDR | LUP_RETURN_NAME, &hLookup) == SOCKET_ERROR) { PrintError("WSALookupServiceBegin"); return; } printf ("Performing Query for service (type, name) = (%d, %s) . . .\n\n", nServiceType, pszServerName); if (strcmp(pszServerName, "*") == 0) { // enumerate all service instances for (;;) { dwResult = WSALookupServiceNext(hLookup, 0, &dwLength, pQS); if (dwResult == SOCKET_ERROR) { if (WSAGetLastError() == WSAEFAULT) { printf("WSALookupServiceNext Error: Oops, we need a larger buffer size of : %d Bytes\n", dwLength); } else { PrintError("WSALookupServiceNext"); } WSALookupServiceEnd (hLookup); return; } if (!dwResult) { for (DWORD i = 0; i < pQS->dwNumberOfCsAddrs; i++) { SOCKADDR_STORAGE *mypt = (SOCKADDR_STORAGE *) pQS->lpcsaBuffer[i].RemoteAddr.lpSockaddr; if (mypt) { // we have valid remote sockaddr char temp[DEFAULT_STRING_LEN] = {'\0'}; printf ("Name[%d]: %30s", i, pQS->lpszServiceInstanceName); GetSockAddrString (mypt, pQS->lpcsaBuffer[i].RemoteAddr.iSockaddrLength, temp, DEFAULT_STRING_LEN); printf("%40s\n", temp); if (! fKnownSapId) ClientSend(&(pQS->lpcsaBuffer[i])); } } } } } else { dwResult = WSALookupServiceNext(hLookup, 0, &dwLength, pQS); if (dwResult == SOCKET_ERROR) { if (WSAGetLastError() == WSAEFAULT) { printf("WSALookupServiceNext Error: Oops, we need a larger buffer size of : %d Bytes\n", dwLength); } else { PrintError("WSALookupServiceNext"); } WSALookupServiceEnd (hLookup); return; } if (!dwResult) { for (DWORD i = 0; i < pQS->dwNumberOfCsAddrs; i++) { SOCKADDR_STORAGE *mypt = (SOCKADDR_STORAGE *) pQS->lpcsaBuffer[i].RemoteAddr.lpSockaddr; if (mypt) { // we have valid remote sockaddr char temp[DEFAULT_STRING_LEN] = {'\0'}; printf ("Name[%d]: %30s", i, pQS->lpszServiceInstanceName); GetSockAddrString (mypt, pQS->lpcsaBuffer[i].RemoteAddr.iSockaddrLength, temp, DEFAULT_STRING_LEN); printf("%40s\n", temp); if (! fKnownSapId) ClientSend(&(pQS->lpcsaBuffer[i])); } } } WSALookupServiceEnd (hLookup); } }