大家好:
小弟现在做的是几个客户端连接到服务器上,客户端要将几个字段一起发到服务器上,
现在我要达到的效果是,在服务器接收时能判别是哪个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;
}

解决方案 »

  1.   

    服务器端:
    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;
    }
      

  2.   

    由我的服务器端可看出我定了M,N,O,P,Q字头想把各个字段分开,上面客户端省了O,P,Q后的字段了,请各位指教啊!