1. 程式人生 > >vs2010中處理char和CString

vs2010中處理char和CString

編寫個網路聊天的程式,sendto和recvfrom函式中使用char,使用sprintf格式化呢又提示警告,要用format函式,使用CString物件呢經過lParam引數傳遞後又不好轉換,接收端接收到的全是亂碼,不知道該如何處理了,程式碼如下:
這是接收端的程式碼
DWORD WINAPI CSX15_CHATDlg::ChatProc(LPVOID lpParam)
{
SOCKET sock = ((RecvParam*)lpParam)->sock ;
HWND hWnd = ((RecvParam*)lpParam)->hWnd ;
SOCKADDR_IN AddrFrom;
int len = sizeof( SOCKADDR );

char recvBuf[200],recvTemp[400];

while(1)
{
if( SOCKET_ERROR == recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&AddrFrom,&len))
{
break;
}
sprintf(recvTemp,"%s:\n%s",inet_ntoa(AddrFrom.sin_addr ),recvBuf);
::PostMessageW(hWnd,WM_RECVDATA,0,(LPARAM)recvTemp); //自定義訊息,用OnRecvdata處理
}
return 0;
}

這是傳送端的
afx_msg LRESULT CSX15_CHATDlg::OnRecvdata(WPARAM wParam, LPARAM lParam)
{
CString str,strtemp;

str = (char*)lParam;

GetDlgItemText( IDC_EDIT_RECV,strtemp );
strtemp += _T("\r\n");
strtemp += str;
SetDlgItemText( IDC_EDIT_RECV,strtemp );
return 0;
}


void CSX15_CHATDlg::OnBnClickedBtnSend() //傳送按鈕
{
// TODO: 在此新增控制元件通知處理程式程式碼
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress ( dwIP );

SOCKET socketClient = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrTo;
addrTo.sin_addr .S_un .S_addr = htonl(dwIP);
addrTo.sin_family = AF_INET;
addrTo.sin_port = htons(6000);

CString sendBuf;
GetDlgItemText( IDC_EDIT_SEND,sendBuf );
sendto(m_socket,(const char*)&sendBuf,sendBuf.GetLength () + 1,0,(SOCKADDR*)&addrTo,sizeof( SOCKADDR));
SetDlgItemText(IDC_EDIT_SEND,_T(""));
}