Esempio n. 1
0
// Ŭ���̾�Ʈ�� ������ ���
DWORD WINAPI ProcessClient(LPVOID arg)
{
	Error ER;

	Socket_Cli SC;//����κ��� ����.. ���� ����Ʈ�� �����ٰ� �ؾ߰���?
	Parser Ps;

	SC.set_sock((SOCKET)arg);
	int retval;
	char buf[BUFSIZE + 1];

	// Ŭ���̾�Ʈ ���� ���
	SC.addrlen = sizeof(SC.get_sockaddr());
	getpeername(SC.get_sock(), (SOCKADDR *)&SC.get_sockaddr(), &SC.addrlen);

	while (1){
		// ������ �ޱ�
		retval = recv(SC.get_sock(), buf, BUFSIZE, 0);
		if (retval == SOCKET_ERROR){
			ER.err_display("recv()");
			break;
		}
		else if (retval == 0)
			break;

		//accept�ϰ� �������ߴ��� ��Ŷ�� �޾Ƽ� �ؼ��Ѵ����� �ؾ��ϴ°Ŷ� ���⼭ ��
		//�ļ����� ���ʻ��� ���� �������� ī���� �����ؼ� �ѹ��� �ش� �׸��� ���Ϳ� ����ϴ°͵� ����������.
		//if(�ļ� ���� ������) 
		if (Ps.parsing_msg(buf) == 0){
			SC.set_num(cli_num);
			cli_info.push_back(SC);
			cli_num++;
		}
		

		// ���� ������ ���
		buf[retval] = '\0';
		/*printf("[TCP/%s:%d] %s\n", inet_ntoa(SC.get_sockaddr().sin_addr),
			ntohs(SC.get_sockaddr().sin_port), buf);*/

		//���� �����Ϳ��� Ŭ�� �ѹ��κи� �����ö��� 0���״� ���Ϳ��� �˻��ؼ� ���� �������ΰ� ã�Ƽ� �� �ѹ��� ��ü�ؼ� ��ü�� �����Ѵ�
		//buf[0~1]�ѹ��� 00~99 �̷������� �����ɰŶ������� �׷� Ŭ�� �ѹ��� ���⿡ �־ ���� �ٲ�����°����� Ŭ�� ��ȣ�� itoa�� �̹� ���ڿ���
		//�ٲ��� �������°� �װ� �ε��������� ��������ҰŰ���
		int max = cli_info.size();
		for (int i = 0; i < max; i++){
			//getpeername(cli_info[i].get_sock(), (SOCKADDR *)&cli_info[i].get_sockaddr(), &cli_info[i].addrlen);
			if (cli_info[i].get_sockaddr().sin_port == SC.get_sockaddr().sin_port){//���Ϳ� �ִ� Ŭ���� ������ Ŭ��� ������ �����ѰŸ� �ѹ� ����Ŷ���� 
				strcpy_s(buf, Ps.re_packet_msg(buf, cli_info[i].get_num()));
			}
		}
		// ������ ������
		//������ ���� Ŭ�� ���� ��ü���� �ٽ� �����Ѵ�, ���� Ŭ�� �����ص� ���������
		for (int i = 0; i < max; i++){
			retval = send(cli_info[i].get_sock(), buf, retval, 0);
			if (retval == SOCKET_ERROR){
				ER.err_display("send()");
				break;
			}
		}
	}

	// closesocket()
	closesocket(SC.get_sock());
	/*printf("[TCP ����] Ŭ���̾�Ʈ ����: IP �ּ�=%s, ��Ʈ ��ȣ=%d\n",
		inet_ntoa(SC.get_sockaddr().sin_addr), ntohs(SC.get_sockaddr().sin_port));*/

	return 0;
}