64,683
社区成员
发帖
与我相关
我的任务
分享
// 这里是从客户端收到的IP地址
// 这里我的问题是,为什么我直接用把IP和buf直接格式化到下面的ShowMessage,字符串
// 会出现乱码。也就是当我这样写,显示的内容是乱码的
// threadParam->IOCPModel->_ShowMessage(_T("收到 %s:%d 信息:%s"),
// inet_ntoa(lpPerHandleData->clientAddr.sin_addr),
// ntohs(lpPerHandleData->clientAddr.sin_port),
// lpPerIoData->DataBuf.buf);
CString strIP(inet_ntoa(lpPerHandleData->clientAddr.sin_addr));
CString strBuf(lpPerIoData->DataBuf.buf);
threadParam->IOCPModel->_ShowMessage(_T("收到 %s:%d 信息:%s"),
strIP,
ntohs(lpPerHandleData->clientAddr.sin_port),
strBuf);
// 显示提示信息,在主窗口显示;
void CIOCPModel::_ShowMessage(const CString szFormat,...)const
{
// 根据传入的参数格式化字符串;
CString strMessage;
va_list arglist;
// 处理变长参数;
va_start(arglist,szFormat);
strMessage.FormatV(szFormat,arglist);
va_end(arglist);
// 在主窗口中显示;
CASimpleIOCPServerDlg * mainDlg = (CASimpleIOCPServerDlg *)m_pMaindlg;
if (m_pMaindlg != NULL)
{
mainDlg->AddInformation(strMessage);
}
}
void HexDump(char *buf,int len) {
int i,j,k;
char binstr[80];
for (i=0;i<len;i++) {
if (0==(i%16)) {
sprintf(binstr,"%04x -",i);
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
} else if (15==(i%16)) {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
sprintf(binstr,"%s ",binstr);
for (j=i-15;j<=i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
} else {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
}
}
if (0!=(i%16)) {
k=16-(i%16);
for (j=0;j<k;j++) {
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j<i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
}
}