분명 계산상으로는 패킷이 맞는데 서봐와 클라이언트 둘다 동시에 리시브상태에 들어서는 사태가 발생하네요 ㅠㅜ
일단 개략적인 소스는
server----------------------------
void User::Run() //관리자 쓰레드에서 돌아갈 Run 멤버 함수 { char buf[BUFFER]; //입출력 버퍼 cout<<"start admin"<<endl; string temp = ""; temp += "수행하고자 하는 명령어를 입력해 주세요.(명령어를 알고 싶다면 help를 입력하세요.)\n"; temp += ">>"; memset(buf,0x00,BUFFER); //버퍼 초기화 memcpy(buf,temp.c_str(),temp.size()); //버퍼에 출력할 문자열 복사 send(*admin,buf,BUFFER,0); //전달, 여기서 에러 temp.clear(); try{ while(true) {//명령을 반복적으로 받아서 명령 처리 멤버함수에 전달 char buf[128] = ""; string command = "";
recv(*admin,buf,BUFFER,0);
this->command(*(new string(buf))); send(*admin,END,strlen(END),0); } } catch(exception e) {//명령처리 함수에서 에러(종료신호, 소켓연결 끊어짐)를 던지면 쓰레드 함수 종료 } }
void User::connectUser(SOCKET *client) { char buf[BUFFER] = "ID :"; //입출력버퍼 생성과 출력 자료 초기화 send(*client,buf,BUFFER,0); //버퍼 전송 send(*client,END,BUFFER,0); //전송파일 끝 신호 전송