Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
22ef34bb6This file is pinned to the selected release. Download the original to open it in your design tool.
#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);
}
}
}
}
}