/
redgpu
/
bullet
Обзор
Документация
Войти
/
redgpu
/
bullet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/clsocket/RecvAsync.cpp
100 строк
2 KB
erwincoumans
Code-style consistency improvement:
24 сен 2018, 00:17
24 сен 2018, 00:17
ab8f169
Код
Авторство
О чём код?
#include <pthread.h> #include "PassiveSocket.h" #ifdef WIN32 #include <windows.h> // usually defined with #include <unistd.h> static void sleep(unsigned int seconds) { Sleep(seconds * 1000); } #endif #define MAX_PACKET 4096 #define TEST_PACKET "Test Packet" struct thread_data { const char *pszServerAddr; short int nPort; int nNumBytesToReceive; int nTotalPayloadSize; }; void *CreateTCPEchoServer(void *param) { CPassiveSocket socket; CActiveSocket *pClient = NULL; struct thread_data *pData = (struct thread_data *)param; int nBytesReceived = 0; socket.Initialize(); socket.Listen(pData->pszServerAddr, pData->nPort); if ((pClient = socket.Accept()) != NULL) { while (nBytesReceived != pData->nTotalPayloadSize) { if (nBytesReceived += pClient->Receive(pData->nNumBytesToReceive)) { pClient->Send((const uint8 *)pClient->GetData(), pClient->GetBytesReceived()); } } sleep(100); delete pClient; } socket.Close(); return NULL; } int main(int argc, char **argv) { pthread_t threadId; struct thread_data thData; CActiveSocket client; char result[1024]; thData.pszServerAddr = "127.0.0.1"; thData.nPort = 6789; thData.nNumBytesToReceive = 1; thData.nTotalPayloadSize = (int)strlen(TEST_PACKET); pthread_create(&threadId, 0, CreateTCPEchoServer, &thData); sleep(1); // allow a second for the thread to create and listen client.Initialize(); client.SetNonblocking(); if (client.Open("127.0.0.1", 6789)) { if (client.Send((uint8 *)TEST_PACKET, strlen(TEST_PACKET))) { int numBytes = -1; int bytesReceived = 0; client.Select(); while (bytesReceived != strlen(TEST_PACKET)) { numBytes = client.Receive(MAX_PACKET); if (numBytes > 0) { bytesReceived += numBytes; memset(result, 0, 1024); memcpy(result, client.GetData(), numBytes); printf("received %d bytes: '%s'\n", numBytes, result); } else { printf("Received %d bytes\n", numBytes); } } } } }