无法接收完整的字符串 [英] Cannot receive complete string

查看:158
本文介绍了无法接收完整的字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在21天内按照Sam21学习VC ++ 6.0编写了一个简单的套接字程序。我有一个服务器和一个客户端。我为发送按钮和接收编写了处理程序。当我发送一个字符串时,我只收到接收方字符串的第一个字母。我想收到整个字符串。这是我的代码:



发送::

<前lang =cs> void CsocketDlg :: OnClickedBsend()
{
// TODO:添加你的控制通知处理程序代码在这里
int iLen;
int iSent;
// 带变量的同步控件
UpdateData(TRUE);
// if(m_dSetThresholdFineDfLB.Create()== IDOK)
< span class =code-comment> // m_strMessage = m_dSetThresholdFineDfLB.m_sFrameLB;
/ / UpdateData(FALSE);
if (m_strMessage!=
{
iLen = m_strMessage.GetLength();
// 发送消息
iSent = m_sConnectSocket.Send(LPCTSTR(m_strMessage) ),艾朗);
// 我们是否能够发送消息
if (iSent == SOCKET_ERROR)
{
}
else
{
// 将消息添加到列表框
m_ctlSent.AddString(m_strMessage );
// 将变量与控件同步
UpdateData(FALSE);
}
}
}



收到::

<前lang =cs> < span class =code-keyword> void CsocketDlg :: OnReceive( void
{
char * pBuf = new char [ 1025 ];
int iBufSize = 1024 ;
int iRcvd;
CString strRecvd;
// 收到消息
iRcvd = m_sConnectSocket.Receive(pBuf,iBufSize );
// 我们收到了什么吗?
if (iRcvd == SOCKET_ERROR)
{
}
else
{
// 截断消息的结尾
pBuf [iRcvd] = NULL;
// 将邮件复制到CString
strRecvd = pBuf;
// 将消息添加到收到的列表框
m_ctlRecvd.AddString( strRecvd);
// 将变量与控件同步
UpdateData(FALSE);
}
}

解决方案

从使用unicode更改为在项目属性中使用多字节。

I wrote a simple socket program by following Sam21 learn VC++ 6.0 in 21 days. I have a server and a client. I wrote handlers for send button and receive. When I send a string I am receiving only first letter of the string on the receive side. I wanna receive the entire string. This is my code:

Send::

void CsocketDlg::OnClickedBsend()
{
    // TODO: Add your control notification handler code here
    int iLen;
    int iSent;
    //sync controls with variables
    UpdateData(TRUE);
    //if(m_dSetThresholdFineDfLB.Create()==IDOK)
        //m_strMessage = m_dSetThresholdFineDfLB.m_sFrameLB;
    //UpdateData(FALSE);
    if(m_strMessage  != " ")
    {
        iLen = m_strMessage.GetLength();
        //send the message
        iSent = m_sConnectSocket.Send(LPCTSTR(m_strMessage),iLen);
        //were we able to send the message
        if(iSent == SOCKET_ERROR)
        {
        }
        else
        {
            //Add the message to the list box
            m_ctlSent.AddString(m_strMessage);
            //sync the variables with the control
            UpdateData(FALSE);
        }
    }
}


Receive::

void CsocketDlg::OnReceive(void)
{
    char *pBuf = new char[1025];
   int iBufSize = 1024;
   int iRcvd;
   CString strRecvd;
   //receive the message
    iRcvd = m_sConnectSocket.Receive(pBuf, iBufSize);
    //did we receive anything?
      if(iRcvd == SOCKET_ERROR)
   {
   }
   else
   {
       //truncate the end of the message
       pBuf[iRcvd] = NULL;
       //copy the message to CString
       strRecvd = pBuf;
       //add the message to the received list box
       m_ctlRecvd.AddString(strRecvd);
       //sync the variables with the controls
       UpdateData(FALSE);
   }
}

解决方案

Changed from use unicode to use multi-byte in project properties.


这篇关于无法接收完整的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆