大家好:
小弟现在做的是几个客户端连接到服务器上,客户端要将几个字段一起发到服务器上,
现在我要达到的效果是,在服务器接收时能判别是哪个IP地址发过来的,也就是分清是哪个客户机,并且要把每一个客户端发来的数据中的几个字段分开,比如说AABBCC中有三个字段AA,BB,CC,请问怎么制定这个协议呢,附上部分程序:
客户端:
UINT _SendMsgThread(LPVOID lparam) //TCP发送信息线程
{
CManageClientDlg *pDlg=(CManageClientDlg *)lparam;
if(pDlg->StopServer==true) return -1;
CSocket sockClient;
sockClient.Create();
CString ip,strError;
pDlg->m_You_IP.GetWindowText(ip);
int conn=sockClient.Connect(ip, PORT+pDlg->m_client);
if(conn==0) ///////////////////////////////////
{
AfxMessageBox("_SendMsgThread Connect错误!"+pDlg->GetError(GetLastError()));
sockClient.ShutDown(2);
sockClient.Close();
AfxEndThread(1L);
return 0;
}
//首先发送标记M为信息,2
int end=0;
end=sockClient.Send("M",FLAG);
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
else if(end!=2)
{
AfxMessageBox("消息头错误");
return -1;
} CString strMsg=pDlg->m_equ;
end=sockClient.Send(strMsg,strMsg.GetLength());
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
///////////////////
end=sockClient.Send("N",FLAG);
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
CString strMsg1=pDlg->m_pname;
end=sockClient.Send(strMsg1,strMsg1.GetLength());
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
小弟现在做的是几个客户端连接到服务器上,客户端要将几个字段一起发到服务器上,
现在我要达到的效果是,在服务器接收时能判别是哪个IP地址发过来的,也就是分清是哪个客户机,并且要把每一个客户端发来的数据中的几个字段分开,比如说AABBCC中有三个字段AA,BB,CC,请问怎么制定这个协议呢,附上部分程序:
客户端:
UINT _SendMsgThread(LPVOID lparam) //TCP发送信息线程
{
CManageClientDlg *pDlg=(CManageClientDlg *)lparam;
if(pDlg->StopServer==true) return -1;
CSocket sockClient;
sockClient.Create();
CString ip,strError;
pDlg->m_You_IP.GetWindowText(ip);
int conn=sockClient.Connect(ip, PORT+pDlg->m_client);
if(conn==0) ///////////////////////////////////
{
AfxMessageBox("_SendMsgThread Connect错误!"+pDlg->GetError(GetLastError()));
sockClient.ShutDown(2);
sockClient.Close();
AfxEndThread(1L);
return 0;
}
//首先发送标记M为信息,2
int end=0;
end=sockClient.Send("M",FLAG);
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
else if(end!=2)
{
AfxMessageBox("消息头错误");
return -1;
} CString strMsg=pDlg->m_equ;
end=sockClient.Send(strMsg,strMsg.GetLength());
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
///////////////////
end=sockClient.Send("N",FLAG);
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
CString strMsg1=pDlg->m_pname;
end=sockClient.Send(strMsg1,strMsg1.GetLength());
if(end==SOCKET_ERROR)
{
AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));
return -1;
}
解决方案 »
- 关于选择文件夹对话框如何实现新增文件夹功能
- vc++连接ACCESS出现系统提示关闭错误
- 求专业英语 createwindows function 的一段翻译
- 紧急求助:谁有<<VISUAL C++/TURBO C串口通信编程实践>>一书的随书光盘?
- 我在基类是CFormView的程序里,添加了CSliderCtrl,并加入了下面的代码,可是一拖动 视图的滚动条,程序就出错,退出.
- 紧急问题,希望大家帮忙,无法连接…………
- 我是菜鸟,遇到一个奇怪的问题。。。
- 多了一个▲,希望大家共同努力,散分50;
- SystemParametersInfo 调用错误,求助!!!
- 对话框怎么和ODBC数据库连接啊,编辑框控件里怎么显示数据库的内容?
- DAO新增记录的问题
- 为何Release版的可执行程序比Debug版小?
int CFeedBack::ReceiveFileMsg(CSocket &recSo,SOCKADDR_IN &client)//接受函数
{
if(StopServer==true) return -1; char buff1[100]={0};
char buff2[100]={0};
char buff3[100]={0};
char buff4[100]={0};
char buff5[100]={0};
CString msg1,msg2,msg3,msg4,msg5;
int ret1=0;
int ret2=0;
int ret3=0;
int ret4=0;
int ret5=0; switch(m_type)
{
case 'M':
for(;;)
{
ret1=recSo.Receive(buff1,100);
if(ret1==0)
break;
msg1+=buff1;
}
break; case 'N':
for(;;)
{
ret2=recSo.Receive(buff2,100);
if(ret2==0)
break;
msg2+=buff2;
}
break; case 'O':
for(;;)
{
ret3=recSo.Receive(buff3,100);
if(ret3==0)
break;
msg3+=buff3;
}
break; case 'P':
for(;;)
{
ret4=recSo.Receive(buff4,100);
if(ret4==0)
break;
msg4+=buff4;
}
break; case 'Q':
for(;;)
{
ret5=recSo.Receive(buff5,100);
if(ret5==0)
break;
msg5+=buff5;
}
break;
}
int nItem;
nItem=m_log.InsertItem(0,msg1);
m_log.SetItemText(nItem,1,msg2); m_log.SetItemText(nItem,2,msg3); m_log.SetItemText(nItem,3,msg4); m_log.SetItemText(nItem,4,msg5); recSo.Close();
return 0;
}