Visual C++网络编程问题

jimshen 2000-04-03 04:37:00
我用Visual C++编写了两个程序,一个作为服务器,另一个为客户端。现有以下问题,望各位高手相助:
在服务器打开的情况下,客户端输入的数据能被服务器接收,一旦客户端关闭,服务器端触发OnClose事件,关闭连接,客户端再次连接时就无法连接到服务器,我希望服务器始终能接受客户端的连接请求!我用的是MFC的CSocket类.
...全文
320 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimshen 2000-04-05
  • 打赏
  • 举报
回复
我已经解决了这个问题,谢谢各位的帮助!
ring 2000-04-05
  • 打赏
  • 举报
回复
check your mailbox
xielm 2000-04-05
  • 打赏
  • 举报
回复
此问题应该是server端的问题。每次客户端有连接请求时,监听socket需要 new 一个新的socket 和 client 端请求的socket建立连接。当server端socket 服务器端触发OnClose 时,你要关闭自己的socket,并且删除自己占用的内存空间。
记住:server 端每次是要new 出来,且关闭时要delete掉。

Sniper 2000-04-05
  • 打赏
  • 举报
回复
jimshen,把你的代码传给我,我可以帮你看一下。
OUYAN 2000-04-04
  • 打赏
  • 举报
回复
我以前用VB也碰到过一样的问提。
Elephant 2000-04-04
  • 打赏
  • 举报
回复
你的Accept里是不是有"this"这个参数并且直接用Relese编译的?如果是的话,你的用来等待连接的Socket被"覆盖"了。你需要给Accept一个新的CAsyncSocket对象。
jimshen 2000-04-04
  • 打赏
  • 举报
回复
对于powerstone朋友提出的方法我在程序中已经使用了,我觉得问题应在服务器端,当客户端程序关闭后,服务器端触发OnClose事件,不能继续接收连接请求。我在OnClose事件后调用了Listen方法,客户端再次连接时可以连接到服务器,但发送的消息不能被服务器接收到,如何解决?我用的是面向连接的方式(TCP)不是UDP。
jimshen 2000-04-04
  • 打赏
  • 举报
回复
Ring,能不能把你编的源码给我一份?
Elephant 2000-04-04
  • 打赏
  • 举报
回复
我就是上面这个意思。这种方法用DEBUG是不能编译的,但Release却可以。
Elephant 2000-04-04
  • 打赏
  • 举报
回复
我就是上面这个意思。
ring 2000-04-04
  • 打赏
  • 举报
回复
其实就是应该使用两个socket
其中一个(socket1)从一诞生就是用来侦听的
在OnAccept里每接受到一个请求就new一个(socket2)进行连接
在socket2的OnClose里要使用this->Close();然后再delete this;
这样子,客户端再请求一次就再new一个,再断就再close delete一次
我就是这么用的,没出过错儿
powerstone 2000-04-03
  • 打赏
  • 举报
回复
每次连接后使用accept生成一个新的端口与client通信,这样当client关闭后server还可以接受客户的请求。
scorpion 2000-04-03
  • 打赏
  • 举报
回复
Client端如果用的是CMyClient m_client,再次使用时仍须调用Create(),然后调用Connect()进行连接。
trace 2000-04-03
  • 打赏
  • 举报
回复
你是如何关闭连接的?只调用了close()?试试将接收socket释放掉
Sniper 2000-04-03
  • 打赏
  • 举报
回复
我也遇到过这种问题,是这样解决的:
Client端的CSocket对象用CMyClient *m_pClient,每次联接时new一个对象,然后进行联接、传送,用完后delete掉,下次使用时重新new。

18,356

社区成员

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

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