问题是这样的,两端连接成功了,然后我服务器端发送给客户端的时候,客户端可以显示出来。而客户端发送给服务器端的时候却显示不出来。
两个的发送代码如下void CSocketServerDlg::OnSent() 
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_sInputText.TrimLeft(" ");//去掉字符串前面的空格字符
    m_sInputText.TrimRight(" ");//去掉字符串后面的空格字符
int j = 0;
char chardata[1024];
memset(chardata,0,1024);
int datalength ;
int templength = m_sInputText.GetLength();
SOCKET tempsocket;

memcpy(chardata,m_sInputText.GetBuffer(templength),templength);
//memccpy(chardata,m_sInputText.GetBuffer(templength),templength);
datalength=m_connectionList.GetCount();
//将一个客户端发送的消息传递到其他客户端去
for(j=0;j<datalength;j++)
{
tempsocket=m_connectionList.GetAt(m_connectionList.FindIndex(j));
send(tempsocket,chardata,strlen(chardata),0);
}
SetDlgItemText(IDC_INPUT,"");
}客户端响应代码如下LRESULT CSocketClientDlg::OnClientMessage(WPARAM wParam, LPARAM lParam)
{
CEdit * output=NULL;
char s[1024];
int len;
static int i=0;
switch(lParam)
{
case FD_CONNECT:
len=GetLastError();
if(len!=0)
{
AfxMessageBox("Error in Connecting");
}
else
{
m_List.InsertString(i,"Having connected to server!\n");
m_List.SetCurSel (i);
i++;
}
return 0;
case FD_READ:
len=recv(m_client.m_hSocket,s,1024,0);
s[len]='\n';
s[len+1]=NULL;
m_List.InsertString(i,s);
m_List.SetCurSel (i);
i++;
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
m_List.InsertString(i,"An network error has occured,the connection is dropped");
m_List.SetCurSel (i);
i++;
closesocket(m_client.m_hSocket);
return 0;
}
return 0;
}服务器端响应代码如下LRESULT CSocketServerDlg::OnServerMessage(WPARAM wParam, LPARAM lParam)
{
SOCKET socket,ts;
int length,i;
char s[1024];
int len;
static int ii=1;
switch(lParam)
{
case FD_ACCEPT:
socket= accept(m_server.m_hSocket,NULL,NULL);
length=m_connectionList.GetCount();
for(i=0;i<length;i++)
{
ts=m_connectionList.GetAt(m_connectionList.FindIndex(i));
s[0]=NULL;
strcat(s,"一个客户端已连接\n");
send(ts,s,strlen(s),0);
}
m_List.InsertString(ii,"一个客户端已连接\n");
m_List.SetCurSel (ii);
ii++;
//随时跟踪滚动条的位置
m_connectionList.AddHead(socket);
return 0;

case FD_READ:
  length=m_connectionList.GetCount();
  for(i=0;i<length;i++)
  {
  socket=m_connectionList.GetAt(m_connectionList.FindIndex(i));
  if(socket==wParam)
  {
len=recv(socket,s,1024,0);
s[len]='\n';
s[len+1]=NULL;
m_List.InsertString(ii,s);
m_List.SetCurSel (ii);
ii++;
return 0;
  }
  }

return 0;

case FD_WRITE:
return 0;

case FD_CLOSE:
return 0;

default:
m_List.InsertString(ii,"An network error has occured,the connection is dropped");
m_List.SetCurSel (ii);
ii++;
return 0;
}
return 0;
}

解决方案 »

  1.   

    static int ii=1;=>  static int ii=0;
      

  2.   

    memcpy(chardata,(LPCSTR)m_sInputText,templength);
      

  3.   


    这个没有问题,因为我m_List里面在初始化的时候使用了第一行。所以这里从第二行开始。
      

  4.   

    昨天请了博士帮忙看了,原来是发送端出问题了。在Clien里面的发送端应该如下void CSocketClientDlg::OnSent() 
    {
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    m_sInputText.TrimLeft(" ");//去掉字符串前面的空格字符
            m_sInputText.TrimRight(" ");//去掉字符串后面的空格字符
    m_client.SendString(m_sInputText.GetBuffer(0),m_sInputText.GetLength());
    SetDlgItemText(IDC_INPUT,"");
    }