服务器收到数据直接发回给客户端不可以吗?请大侠指教

savvyzheng 2009-05-21 08:09:11
服务器收到数据直接发回给客户端不可以吗?我测试过,客户端发给服务器的数据正确,直接发回去,却都是乱码。
代码如下:
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);
}

另外,客户端是一个有两个视图的单文档,每个视图创建时各绑定了一个端口,不会是这的问题吧
...全文
256 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
allix123 2009-05-24
  • 打赏
  • 举报
回复
发送的时候多加一个字节,就不会发生错误了。
send(sock,buf,strlen(buf)+1,0);
arong1234 2009-05-23
  • 打赏
  • 举报
回复
不知道你所谓的ka是什么意思?如果说你的界面不显示刷新的话,这很正常,网络发送接收貌似你用的是阻塞调用,这种情况必然不可能刷新的。你要么需要用异步方式(CAsyncSocket)或者多线程
[Quote=引用 8 楼 savvyzheng 的回复:]
引用 7 楼 arong1234 的回复:
所有windows上的网络程序,最终几乎都是要用socket的,所以如果你的程序很卡
不是socket的问题,而是你程序有问题。
引用 6 楼 savvyzheng 的回复:
利用Windows Sockets编程时,服务器程序总是很卡,这是为什么?

没写网络部分的时候不卡,写了就卡,现在我只要把接收数据的代码屏蔽掉就不卡了
[/Quote]
hslinux 2009-05-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 savvyzheng 的回复:]
引用 7 楼 arong1234 的回复:
所有windows上的网络程序,最终几乎都是要用socket的,所以如果你的程序很卡
不是socket的问题,而是你程序有问题。
引用 6 楼 savvyzheng 的回复:
利用Windows Sockets编程时,服务器程序总是很卡,这是为什么?

没写网络部分的时候不卡,写了就卡,现在我只要把接收数据的代码屏蔽掉就不卡了
[/Quote]

说明你的接收数据的代码写得有问题。


,客户端发给服务器的数据正确,直接发回去,却都是乱码。

把接收的到数据跟你发送的数据比较下,看看在什么位置开始错位了,然后考虑下该怎么处理。
savvyzheng 2009-05-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 arong1234 的回复:]
所有windows上的网络程序,最终几乎都是要用socket的,所以如果你的程序很卡
不是socket的问题,而是你程序有问题。
引用 6 楼 savvyzheng 的回复:
利用Windows Sockets编程时,服务器程序总是很卡,这是为什么?

[/Quote]没写网络部分的时候不卡,写了就卡,现在我只要把接收数据的代码屏蔽掉就不卡了
arong1234 2009-05-23
  • 打赏
  • 举报
回复
所有windows上的网络程序,最终几乎都是要用socket的,所以如果你的程序很卡
不是socket的问题,而是你程序有问题。
[Quote=引用 6 楼 savvyzheng 的回复:]
利用Windows Sockets编程时,服务器程序总是很卡,这是为什么?
[/Quote]
savvyzheng 2009-05-23
  • 打赏
  • 举报
回复
利用Windows Sockets编程时,服务器程序总是很卡,这是为什么?
redleaf515 2009-05-23
  • 打赏
  • 举报
回复
可以.
savvyzheng 2009-05-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 arong1234 的回复:]
不知道你所谓的ka是什么意思?如果说你的界面不显示刷新的话,这很正常,网络发送接收貌似你用的是阻塞调用,这种情况必然不可能刷新的。你要么需要用异步方式(CAsyncSocket)或者多线程
引用 8 楼 savvyzheng 的回复:
引用 7 楼 arong1234 的回复:
所有windows上的网络程序,最终几乎都是要用socket的,所以如果你的程序很卡
不是socket的问题,而是你程序有问题。
引用 6 楼 savvyzheng 的回复:
利用Windows Sockets编程…
[/Quote]界面不刷新,而且软件死了,只能通过任务管理器强制杀死。我只添加了很简单的代码:
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编程,毕业设计用,谢谢了
zhxupc@gmail.com
dengxuxing 2009-05-22
  • 打赏
  • 举报
回复
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);
}
maple_zhj 2009-05-22
  • 打赏
  • 举报
回复
尝试一下,
服务器收到包,得到包长度后,

你向客户端发包时,

,长度为 得到的包长 +1,
试一下,即 发包长度 =iRecv + 1
crst_zh 2009-05-22
  • 打赏
  • 举报
回复
当然可以了,UDP方式,我刚做了一个
an_bachelor 2009-05-22
  • 打赏
  • 举报
回复
发回去之后 那边有没有在字符串后面加零

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧