#include #include "PassiveSocket.h" #ifdef WIN32 #include // usually defined with #include 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); } } } } }