服务器收到数据直接发回给客户端不可以吗?我测试过,客户端发给服务器的数据正确,直接发回去,却都是乱码。
代码如下:
void CServerDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
///*
char szRecv[20];
CString szIP(L"127.0.0.1");
UINT uPort=5800;
int iRecv=m_serverSocket.ReceiveFrom(szRecv,10,szIP,uPort,0);
TRACE("received %d byte\n",iRecv);
szRecv[iRecv]='\0';
// CString str;
// str.Format(L"%s",szRecv);
// MessageBox(str);
m_strRecv=szRecv;//更新编辑框中数据,m_strRecv是控件变量
UpdateData(FALSE); m_serverSocket.SendTo(szRecv,10,5802,L"127.0.0.1",0);
//*/
CDialog::OnTimer(nIDEvent);
}
另外,客户端是一个有两个视图的单文档,每个视图创建时各绑定了一个端口,不会是这的问题吧

解决方案 »

  1.   

    当然可以了,UDP方式,我刚做了一个
      

  2.   

    尝试一下,
    服务器收到包,得到包长度后,你向客户端发包时,,长度为 得到的包长 +1,
    试一下,即 发包长度 =iRecv + 1 
      

  3.   

    void CServerDlg::OnTimer(UINT_PTR nIDEvent)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
    ///*    
        char szRecv[20];
        CString szIP(L"127.0.0.1");
        UINT uPort=5800;
        int iRecv=m_serverSocket.ReceiveFrom(szRecv,10,szIP,uPort,0);
        TRACE("received %d byte\n",iRecv);
        szRecv[iRecv]='\0';
    //    CString str;
    //    str.Format(L"%s",szRecv);
    //    MessageBox(str);
        m_strRecv=szRecv;//更新编辑框中数据,m_strRecv是控件变量
        UpdateData(FALSE);    if(iRecv>0)m_serverSocket.SendTo(szRecv,iRecv,5802,L"127.0.0.1",0);
    //*/
        CDialog::OnTimer(nIDEvent);
    }
      

  4.   

    利用Windows Sockets编程时,服务器程序总是很卡,这是为什么?
      

  5.   

    所有windows上的网络程序,最终几乎都是要用socket的,所以如果你的程序很卡
    不是socket的问题,而是你程序有问题。
      

  6.   

    不知道你所谓的ka是什么意思?如果说你的界面不显示刷新的话,这很正常,网络发送接收貌似你用的是阻塞调用,这种情况必然不可能刷新的。你要么需要用异步方式(CAsyncSocket)或者多线程
      

  7.   

    界面不刷新,而且软件死了,只能通过任务管理器强制杀死。我只添加了很简单的代码:
    char szRecv[20];
    CString szIP(L"127.0.0.1"); //发送端IP
    UINT uPort=5800; //发送端端口
    int iRecv =m_recvSock.ReceiveFrom(szRecv,10,szIP,uPort,0); //接收UDP数据
    TRACE("received %d byte\n",iRecv);
    szRecv[iRecv]='\0';
    加上这些代码就不行了,你留个联系方式吧,我第一次接触winsock编程,毕业设计用,谢谢了
    [email protected]
      

  8.   

    发送的时候多加一个字节,就不会发生错误了。
     send(sock,buf,strlen(buf)+1,0);