15,471
社区成员
发帖
与我相关
我的任务
分享
int _tmain(int argc,char *argv[],char *envp[])
{
CSocketThread *threadone = new CSocketThread();
threadone->Start();
CSocketThread threadtwo;
threadtwo.Start(0);
system("pause");
return 0;
}
#include "windows.h"
//=============================== Type Part ==================================//
class CBaseThread
{
public:
/** Constructor */
CBaseThread();
/** Destructor */
~CBaseThread();
public:
// 设置优先级
BOOL SetPriority(int priority);
// 获取优先级
int GetPriority();
// 挂起线程
DWORD Suspend();
// 还原线程
DWORD Resume();
// 开始跑
DWORD Start(DWORD dwCreationFlags = 0);
// 停止
DWORD Stop ( bool bForceKill = false);
DWORD Stop ( WORD timeout );
protected:
//子类必须实现,线程的具体方法
virtual DWORD ThreadMethod() = 0;
private:
//
static DWORD WINAPI CBaseThread::EntryPoint( LPVOID pArg);
protected:
LPTHREAD_START_ROUTINE m_pThreadFunction; //工作线程指针
BOOL m_bRunThread; //线程是否继续运行的标志
private:
HANDLE m_hThread; //Thread Handle 线程句柄
DWORD m_dwThreadID; //Thread ID 线程ID
LPVOID m_pParent; //pointer of the parent CThread object
DWORD m_dwExitCode; //Exit Code of the thread 线程退出码
};
//============================================================================//
//////////////////////////////// End of File ///////////////////////////////////
//=============================== Include Files ================================
#include "stdio.h"
#include "stdlib.h"
#include <iostream>
using namespace std;
#include "winsock2.h"
#include "BaseThread.h"
//#pragma (lib,"ws2_32.lib")
//=============================== Type Part ====================================
class CSocketThread:public CBaseThread
{
protected:
//子类必须实现,线程的具体方法
DWORD ThreadMethod()
{
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//----------------------
// Create a SOCKET for connecting to server
m_hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if (m_hSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return FALSE;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
sockaddr_in clientService;
clientService.sin_family = AF_INET;
// clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_addr.s_addr = inet_addr( "192.168.18.67" );
// clientService.sin_addr.s_addr = inget_addr( "218.234.70.58" );
clientService.sin_port = htons( 60000 );
// clientService.sin_port = htons( 8090 );
//----------------------
// Connect to server.
if ( connect( m_hSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return FALSE;
}
//----------------------
// Declare and initialize variables.
int bytesSent;
int bytesRecv = 0;
char sendbuf[32] = "Client: Sending data.";
char recvbuf[32] = "";
//----------------------
// Send and receive data.
bytesSent = send( m_hSocket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );
while( bytesRecv != SOCKET_ERROR )
{
bytesRecv = recv( m_hSocket, recvbuf, 32, 0 );
DWORD dwError = GetLastError();
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET )
{
printf( "Connection Closed.\n");
break;
}
printf( "Bytes Recv: %ld\n %s\n", bytesRecv ,recvbuf );
}
WSACleanup();
return TRUE;
}
private:
SOCKET m_hSocket;
};
//==============================================================================
//=============================== Function Part ================================
void ThreadCreateOnStack()
{
WORD flag = 0;
CSocketThread testThread;
testThread.Start(flag);
int iRet = testThread.GetPriority();
testThread.Resume();
}
void ThreadCreateOnHeap()
{
WORD flag = 0;
CSocketThread *pTestThread = new CSocketThread();
pTestThread->Start(flag);
}
int _tmain(int argc,char *argv[],char *envp[])
{
ThreadCreateOnStack();
// ThreadCreateOnHeap();
system("pause");
return 0;
}
//==============================================================================
//////////////////////////////// End of File //////////////////////////////////