class TcpClient02 {
public:




	WSADATA wsaData;
	DWORD dwParam;
	struct  sockaddr_in addr;
	struct  sockaddr_in server;
	SOCKET sock;
	SOCKET ClientSock;
	char port[10],target[2000];
	HANDLE hThread;
	 TcpClient02* p;



	DWORD  RecvThreadMain(LPVOID lpvoid);
	static DWORD  WINAPI RecvThreadEntryPoint(LPVOID lpvoid);
	int TcpClient02::InitWSAdata();
	int TcpClient02::CreateSocket();
	TcpClient02::SockConnect();
	int TcpClient02::SetSockAddr(char *port,char *target);
	void TcpClient02::StartRecv();
	int TcpClient02::Send(char *buf,int size,int Flag);
	int TcpClient02::CloseSock();



} ;





 	DWORD TcpClient02::RecvThreadMain(LPVOID lpvoid) {
		char buf[4096];
		int ret,n,i,id;

		//クラスポインタにキャストしたのですが…
		 p=(TcpClient02*)lpvoid;


		printf("ThreadOpened\n");
		BOOL Flag=TRUE;

		while(Flag){

			ret=recv(p->sock,buf,2048,0);
	
			if(ret>0){
				//ゆくゆくはここはコールバックにしたい。
				printf("%s\n",buf);
			}
		
			if(ret==0){
				closesocket(p->sock);
				Flag=FALSE;
			}
		}

		ExitThread(TRUE);
	}


	DWORD WINAPI TcpClient02::RecvThreadEntryPoint(LPVOID lpvoid){
		TcpClient02* p = (TcpClient02*)lpvoid;
    		// メンバ関数の呼び出しを行う
    		p->RecvThreadMain(lpvoid); // softyaさんのコードを持ってきました。
	}

	int TcpClient02::InitWSAdata(){
		if(WSAStartup(MAKEWORD(2,0), &wsaData)==0)return -1;
		return 0;
	}
	
	int TcpClient02::CreateSocket(){
	    sock= socket(AF_INET,SOCK_STREAM,0);
    		if (sock == INVALID_SOCKET)return -1;
	}

	int TcpClient02::SetSockAddr(char *port,char *target){
		int nport;
		nport=atoi(port);
		if(nport==0)return -1;

    		server.sin_family = AF_INET;
    		server.sin_port = htons(nport);
    		server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
		return 0;
	}
	
	int TcpClient02::SockConnect(){
		connect(sock, (struct sockaddr *)&server, sizeof(server));
	}






	void TcpClient02::StartRecv(){
		//スレッドを起こす
		hThread=CreateThread(NULL , 0 , RecvThreadEntryPoint,
					(LPVOID)this, 0 , &dwParam);
	}


	int TcpClient02::Send(char *buf,int size,int Flag){
		int ret;
		ret=send(sock,buf,size,Flag);
		return ret;
	}


	int TcpClient02::CloseSock(){
		closesocket(sock);
	}

