통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이 
· LiveSeminar  · LiveConference
Visual C++ 포럼마을 입니다.
  마을등급 Visual C++   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 나성훈 주민 33517 since 2006-12-29
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
개인게시판
마을 게시판
등록된 마을 게시판이
없습니다.
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리
 일정관리

 질문&답변
 [소켓] 한글자만 출력되는;  | VC++ 일반 2003-10-11 오전 1:18:14
이진성 (Demian.R)  이진성님께 메시지 보내기이진성님을 내 주소록에 추가합니다.이진성님의 개인게시판 가기 번호: 346961  / 읽음:253

 

 

 

 

보시다 시피 한글자만 출력이 되는데요?

 

제가 무엇을 잘못한건가요?;;

 

소스 랑 같이 올리겟습니다;

 

유니<->아스키는 안한상태 인데 그것 떄문에 짤린건가요?

 

아님 소켓에서 Send랑 Revc가 잘못되서 그런건가요?

 

 

//로그인 버튼을 누를시 data가 날라감

 

void CLogoView::OnLogoBlogin()

{

    // TODO: Add your control notification handler code here

    //소켓 생성 및 커넥션

    //UpdateData(true);

 

    

//일단 센드버튼을 누르면 OnSend를 통해서 ServerSocket으로 들어간다  

 

    USER us = {0};

 

    CString strId;

    CString strPass;

 

    int byteid=400; //id

    int bytepass=400;//pass

    CString strMsgID, strMsgPass;

    

    UpdateData(true);

    

    CEdit * pEditID = (CEdit*)GetDlgItem(IDC_ID);

    CEdit * pEditPass = (CEdit* )GetDlgItem(IDC_PASS);

 

    pEditID->GetWindowText(strMsgID); // 문자열을 가져오기

    pEditPass->GetWindowText(strMsgPass);

 

    byteid = pSok->Send((char*)&strMsgID, 400); //소켓으로 Id 센드

    bytepass = pSok->Send(strMsgPass,200); //소켓으로 pass센드

    

    //센드가 되질 않는 다면 msgbox

    if(byteid<=0)

        AfxMessageBox(_T("Can't Using Soket Service"));

    if(bytepass<=0)

        AfxMessageBox(_T("Can't Using Soket Service"));

 

    //CMainView *dlg = new CMainView;

    //dlg->DoModal();

    //delete dlg;

 

}

 

 

다얄로그 초기화시 소켓 생성

 

BOOL CLogoView::OnInitDialog()

{

    CDialog::OnInitDialog();

    

    // TODO: Add extra initialization here

 

    //메뉴바를 띄워줌

    CCeCommandBar *pCommandBar = (CCeCommandBar*)m_pWndEmptyCB;

    pCommandBar->InsertMenuBar(IDR_MAINBAR);

    

    CString add="203.230.156.151";

    pSok= new CClientSocket;

    pSok->Create();

    pSok->Connect(add,2000);

    EnableButton();//로긴이 안되면 버튼 비활성화 아직 로긴 처리 안됨.

    return TRUE;  // return TRUE unless you set the focus to a control

                  // EXCEPTION: OCX Property Pages should return FALSE

}

 

클라이언트 쪽 소켓 부분

void CClientSocket::OnReceive(int nErrorCode)

{

    // TODO: Add your specialized code here and/or call the base class

    int byte;

    char temp[200];

    CString m_rev;

    

    byte=Receive((LPSTR)temp,200);                  

    if(byte<0) AfxMessageBox(_T("Can't Using Socket Service"));

 

    m_rev=temp;

 

    CCeSocket::OnReceive(nErrorCode);

}

 

서버쪽 소켓 생성 및 리슨

void CPSrvView::OnInitialUpdate()

{

 

    m_pSet = &GetDocument()->m_pSrvSet;

    CRecordView::OnInitialUpdate();

    GetParentFrame()->RecalcLayout();

    ResizeParentToFit();

    //소켓 생성 및 리슨

 

    m_ServerSocket.Create(2000);

    m_ServerSocket.SetHwnd( this ->m_hWnd);

    m_ServerSocket.Listen();

 

}

서버쪽 소켓부분

 

void CServerSocket::OnAccept(int nErrorCode)

{

    // TODO: Add your specialized code here and/or call the base class

    SendMessage(this->m_parentHwnd, WM_ACCEPT_MESSAGE, 0, 0);

 

    CAsyncSocket::OnAccept(nErrorCode);

}

 

void CServerSocket::SetHwnd(HWND _hWnd)

{

    this->m_parentHwnd = _hWnd;

}

서버족 클라이언트 소켓부분

 

void CClientSocket::OnReceive(int nErrorCode)

{

    // TODO: Add your specialized code here and/or call the base class

    SendMessage(this->m_parentHwnd, WM_RECEIVE_MESSAGE, (WPARAM)this, 0);

 

    CAsyncSocket::OnReceive(nErrorCode);

}

 

void CClientSocket::SetHwnd(HWND _hWnd)

{

        this->m_parentHwnd = _hWnd;

}

 

헤더파일에는 구조체랑 WM_RECEIVE_MESSAGE를 다 정의 해논 상태구요;;

    

 

이 글에 답변 등록하기
 [답변]입력은 ID : S...[한줄답변] 2003-10-11 오전 1:22:00
이진성 번호: 388869  
입력은 ID : SA PASSWORD : SA로 한 상태일껍..니다
이 글에 답변 등록하기
 [답변]근데 SA가 뭐에...[한줄답변] 2003-10-11 오전 1:33:00
장명희 번호: 388870  
근데  SA가 뭐에요?
이 글에 답변 등록하기
 [답변][답변] 이곳이 문제인듯..... 2003-10-11 오전 3:52:03
천강우 (akkdong)  천강우님께 메시지 보내기천강우님을 내 주소록에 추가합니다.천강우님의 개인게시판 가기 번호: 346968  

아래 소스에서.. &strMsgID는 CString 인스턴스의 주소가 됩니다.(스트링의 시작주소가 아니라..)
때문에 이 주소에서 400, 200 바이트를 보내는 것은 아무 의미가 없습니다.

 

    byteid = pSok->Send((char*)&strMsgID, 400); //소켓으로 Id 센드

    bytepass = pSok->Send(strMsgPass,200); //소켓으로 pass센드

 

아래처럼 수정하면 전송은 문제 없을 것 같군요...

  

    byteid = pSok->Send((LPCTSTR)strMsgID, 400); //소켓으로 Id 센드

    bytepass = pSok->Send((LPCTSTR)strMsgPass,200); //소켓으로 pass센드

 

참고로... CString은 LPCTSTR operator가 있기 대문에, 위의 예제 처럼 LPCTSTR로
type-cast 하면 스트링 데이터의 주소를 얻을 수 있습니다.

 

 

 

 

이 글에 답변 등록하기
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2010-서울강남-00026호
서울시 강남구 논현동 87-2 미래빌딩 5층 / TEL. 02_6719_6200 / FAX. 02-6499-1910 / 대표: 홍영준
Copyright ⓒ (주) 데브피아. All rights reserved.