www.pudn.com > IOCPNet_Demo.zip > NetTestClient.cpp
#include "stdafx.h" #include "workframe.h" #include "WorkframeReturnCode.h" #include#include #include #include #include #include #include "TCPFunc.h" #define USER_NUMBER 20000 #define THREAD_NUMBER 2000 #define TEST_SERVER_IP "127.0.0.1" // change it! #define TEST_SERVER_PORT 20000 #define SENDING_INTERVAL 50 #define TEST_PACKET_LEN 1000 #define READ_TIMEOUT_TEST (1000 * 30) #define WRITE_TIMEOUT_TEST (1000 * 30) DWORD g_dRunning = 0; DWORD WINAPI NetworkingThread(void *pParam); int Connect(SOCKET *pSock, char *IP, unsigned short Port); int _tmain(int argc, _TCHAR* argv[]) { int Loop; int Key; WSADATA WSAData; WSAStartup(MAKEWORD(2,2), &WSAData); srand((unsigned)time(0)); g_dRunning = 1; printf("Client: Press any key to stop...\n"); for (Loop = 0; Loop < THREAD_NUMBER; Loop++) { if (0 == CreateThread(0, 0, NetworkingThread, (LPVOID)Loop, 0, 0)) { printf("(Loop: %d) CreateThread is failed. Error code = %d\n", Loop, GetLastError()); break; } } Key = getch(); InterlockedExchange((long *)&g_dRunning, 0); Sleep(5000); // just sleep... WSACleanup(); return 0; } // _tmain() DWORD WINAPI NetworkingThread(void *pParam) { int RunID; SOCKET *Sockets; BYTE TestPacket[TEST_PACKET_LEN + 1]; BYTE RecvData[TEST_PACKET_LEN + 1]; int PacketSize; char Temp[2]; DWORD ErrorCode; int iRes; int ConnNum; int Loop; int Index; ConnNum = USER_NUMBER / THREAD_NUMBER; Sockets = (SOCKET *)malloc(sizeof (SOCKET) * ConnNum); RunID = (int)pParam; ZeroMemory(Sockets, sizeof (SOCKET) * ConnNum); itoa(RunID % 10, Temp, 10); PacketSize = TEST_PACKET_LEN; ZeroMemory(TestPacket, sizeof (TestPacket)); memset(TestPacket, Temp[0], PacketSize); TestPacket[0] = 'S'; TestPacket[TEST_PACKET_LEN - 1] = 'E'; for (Loop = 0; Loop < ConnNum; Loop++) { if (0 == Connect(&Sockets[Loop], TEST_SERVER_IP, TEST_SERVER_PORT)) { printf("Connect is failed. Run ID = %d, Loop = %d\n", RunID, Loop); goto ErrHand; } printf("Connect OK. Run ID = %d\n", RunID); } while (1 == InterlockedExchange((long *)&g_dRunning, g_dRunning)) { Index = rand() % ConnNum; iRes = TCPWrite(Sockets[Index], (char *)TestPacket, PacketSize, WRITE_TIMEOUT_TEST, &ErrorCode); if (RET_TIMEOUT == iRes) { printf("TCPWrite is failed. Error code = %d\n", ErrorCode); goto ErrHand; } iRes = TCPRead(Sockets[Index], 0, 0, READ_TIMEOUT_TEST, &ErrorCode); if (0 > iRes) { printf("TCPRead is failed. Error code = %d\n", ErrorCode); goto ErrHand; } ZeroMemory(RecvData, sizeof (RecvData)); iRes = TCPRead(Sockets[Index], (char *)RecvData, iRes, READ_TIMEOUT_TEST, &ErrorCode); if (0 > iRes) { printf("TCPRead is failed. Error code = %d\n", ErrorCode); goto ErrHand; } printf("RunID = %d\n", RunID); //printf("RecvData = %s\n", RecvData); Sleep(SENDING_INTERVAL); } ErrHand: for (Loop = 0; Loop < ConnNum; Loop++) { if (0 != Sockets[Loop]) { closesocket(Sockets[Loop]); Sockets[Loop] = 0; } } free(Sockets); return 0; } // NetworkingThread() int Connect(SOCKET *pSock, char *IP, unsigned short Port) { sockaddr_in SockAddr; *pSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == *pSock) { return 0; } SockAddr.sin_family = AF_INET; SockAddr.sin_addr.s_addr = inet_addr(IP); SockAddr.sin_port = htons(Port); if (SOCKET_ERROR == connect(*pSock, (SOCKADDR*) &SockAddr, sizeof (SockAddr))) { DWORD ErrorCode = WSAGetLastError(); printf("ErrorCode = %d\n", ErrorCode); return 0; } return 1; } // Connect()