服务器收到数据直接发回给客户端不可以吗?我测试过,客户端发给服务器的数据正确,直接发回去,却都是乱码。
代码如下:
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);
}
另外,客户端是一个有两个视图的单文档,每个视图创建时各绑定了一个端口,不会是这的问题吧
代码如下:
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,
试一下,即 发包长度 =iRecv + 1
{
// 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);
}
不是socket的问题,而是你程序有问题。
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]
send(sock,buf,strlen(buf)+1,0);