通信问题 感觉有点没头绪

genius_tong 2010-03-25 10:00:20
程序结构大概是这样的设计:

服务器端:
类CMsg——用于服务器客户端之间通信,保存通信的内容等。
类CListenSocket——继承于CSocket,用于服务器监听。
类CConnectSocket——继承于CSocket,用于服务器端与客户端的通信。
类CServer——图形界面,用MFC做的

客户端
类CMsg——用于服务器客户端之间通信,保存通信的内容等。和服务端一样的。
类CClientSocket——继承于CSocket,用于客户端与服务器的通信。


程序逻辑大概是:
服务器开启->客户端接入->确认连接后,客户端每隔一秒收集部分信息存为CMsg的一个实例,发送给服务器。(目前可以限定只有一个客户端

问题在于,服务器只能有限次接受客户端发送来的消息,几次更新客户端消息之后(有时候一两次、有时候四五次),服务器便不能正常更新。。。。基本确定是服务器在一次接收出错后,后面都不能接收了

服务器接收用的是CSocket,CSocketFile,CArchive三个结合起来用,具体方法我想大家都知道个大概吧,初次写网络,不了解是不是这种方法的问题——我没用多线程(没学过,不会用,不知道有没有必要用),测试时服务器客户端在一台机器上。

哪位大侠帮下忙?
...全文
140 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahniyilin 2010-03-27
  • 打赏
  • 举报
回复
网络通信的时候
服务器端很难绕开多线程开发的
至于如何使用多线程要看楼主你自己的设计了。
例如:一个客户端线程。这个客户端所有的请求和操作都在这个线程里完成。
具体如何使用根据你自己的需求。
在多线程应用的时候,要注意对共有数据的管理。
比如说数据区 data;
线程A和线程B都要使用它的时候。
必须要的时候要数据区 data进行管理。
genius_tong 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zxdyu2009 的回复:]
引用 18 楼 genius_tong 的回复:
引用 17 楼 sandy0066 的回复:
服务器处理速度太慢了,多线程


跪求网络通信方面多线程实现的案例

留下你的邮箱,我会发过去的。
[/Quote]
litonghui1990@gmail.com

好人哇~~
zxdyu2009 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 genius_tong 的回复:]
引用 19 楼 zxdyu2009 的回复:
引用 18 楼 genius_tong 的回复:
引用 17 楼 sandy0066 的回复:
服务器处理速度太慢了,多线程


跪求网络通信方面多线程实现的案例

留下你的邮箱,我会发过去的。

litonghui1990@gmail.com

好人哇~~
[/Quote]
请查收,有问题请与我留言,共同学习。
zxdyu2009 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 genius_tong 的回复:]
引用 9 楼 zxdyu2009 的回复:
楼主,你描述的整个过程挺清楚的,我想知道,服务接收出错是什么原因,你在出错的时候,用GetLastError得到错误码值,再根据这个码值来判断 是什么原因使得接收出错,还有就是你把每隔一秒改成每隔几秒,看看结果是怎么样的?


换成10秒也是一样...程序没报错,只是卡在某个地方,数据不更新了,但客户端还在一个劲的发送数据
[/Quote]
卡在什么地方?每次发送的数据量有多大?
genius_tong 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fengyunzj 的回复:]
用ace吧
[/Quote]

什么是ACE啊,见笑了
genius_tong 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zxdyu2009 的回复:]
楼主,你描述的整个过程挺清楚的,我想知道,服务接收出错是什么原因,你在出错的时候,用GetLastError得到错误码值,再根据这个码值来判断 是什么原因使得接收出错,还有就是你把每隔一秒改成每隔几秒,看看结果是怎么样的?
[/Quote]

换成10秒也是一样...程序没报错,只是卡在某个地方,数据不更新了,但客户端还在一个劲的发送数据
暮叶 2010-03-26
  • 打赏
  • 举报
回复
用ace吧
zxdyu2009 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 genius_tong 的回复:]
引用 17 楼 sandy0066 的回复:
服务器处理速度太慢了,多线程


跪求网络通信方面多线程实现的案例
[/Quote]
留下你的邮箱,我会发过去的。
zxdyu2009 2010-03-26
  • 打赏
  • 举报
回复
楼主,你描述的整个过程挺清楚的,我想知道,服务接收出错是什么原因,你在出错的时候,用GetLastError得到错误码值,再根据这个码值来判断 是什么原因使得接收出错,还有就是你把每隔一秒改成每隔几秒,看看结果是怎么样的?
快乐鹦鹉 2010-03-26
  • 打赏
  • 举报
回复
网上自己找找啊。我要给你案例,那也是到网上找。
genius_tong 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 r3000 的回复:]
同意一楼,多线程是必须的,网络通信是个复杂的东西,在没一定基础前先看
别人写的东西,网上一大把。
[/Quote]

能否推荐些案例?
genius_tong 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sandy0066 的回复:]
服务器处理速度太慢了,多线程
[/Quote]

跪求网络通信方面多线程实现的案例
大海雪山 2010-03-26
  • 打赏
  • 举报
回复
服务器处理速度太慢了,多线程
genius_tong 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wenxy1 的回复:]
楼主,建议你结合经典的书来实践,这样更容易上手。
[/Quote]

书上的案例都很简单呀....可能是这儿资源太少了吧,有何推荐?
genius_tong 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zxdyu2009 的回复:]
卡在什么地方?每次发送的数据量有多大?
[/Quote]

应该是卡在服务器数据接收上了吧。CSocket CArchive CSocketFile三者一起接收的用法,底层一点的东西好像都看不到了,所以具体卡在什么位置也不清楚了...
Wenxy1 2010-03-26
  • 打赏
  • 举报
回复
楼主,建议你结合经典的书来实践,这样更容易上手。
康斯坦汀 2010-03-26
  • 打赏
  • 举报
回复
同意一楼,多线程是必须的,网络通信是个复杂的东西,在没一定基础前先看
别人写的东西,网上一大把。
genius_tong 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 genius_tong 的回复:]
引用 2 楼 happyparrot 的回复:
在做一项需要一定技术支持的东西时,在动笔前,最好先了解一下它的机制和原理,否则就会向你这样,出了问题,根本就不知道如何去解决。


恩,这次是有些急躁了...问一下,这种没一秒客户端向服务器更新数据的做法是否合理?

然后,能否给些MFC多线程网络通信的案例?

最后,一般接收数据用什么方法比较有效率?我记得C#里一般都用byte[]……
[/Quote]

我今天CSocket,CSocketFile,CArchive三个结合起来用也是从书上参考的...实在是苦于找不到好的资料...能不能推荐些资料?
快乐鹦鹉 2010-03-25
  • 打赏
  • 举报
回复
具体多少时间更新一次,一是要根据你的时效性要求,二是要看数据量和处理能力。不能简单的讨论几秒合适。
多线程和网络通信这两个知识点,光给实例你也未必能看懂。还是先找书看看。网上都能下到pdf的资料。
接收的信息都是字节流,用字节数组当然是最直接的方式。
genius_tong 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happyparrot 的回复:]
在做一项需要一定技术支持的东西时,在动笔前,最好先了解一下它的机制和原理,否则就会向你这样,出了问题,根本就不知道如何去解决。
[/Quote]

恩,这次是有些急躁了...问一下,这种没一秒客户端向服务器更新数据的做法是否合理?

然后,能否给些MFC多线程网络通信的案例?

最后,一般接收数据用什么方法比较有效率?我记得C#里一般都用byte[]的
加载更多回复(2)

18,357

社区成员

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

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