我编写了一个通信显示程序,通信部分放在VIEW类中。初始化SOCKET部分放在ON_CREAT中,在VIEW中析构函数中close掉SOCKET。现在出现了一个问题:调试运行时,程序显示正常;但直接运行却常常出现SOCKET初始化错误。我有几个问题向大家请教:
1、为什么开机第一次直接运行正常后,随后直接运行常常出现SOCKET初始化错误?
2、调试运行时,程序为什么又正常显示?
3、SOCKET初始化代码最好放在VIEW类中,还是DOC类中,或是其它类中(老实说,我不知道它们的区别,似乎都可以)?接收数据代码又应该放在哪个类中(程序是用MFC标准生成)?
4、关闭SOCKET代码放在VIEW的析构函数中是否会执行?放在哪个函数中合适?如果不关闭SOCKET,退出程序时,是否自动关闭?请大家不吝赐教!

解决方案 »

  1.   

    数据接收、数据处理、数据显示实际上是三个不同阶段,
    软件中,尽量将关系明确
    Thread、View、Doc
    习惯上采用线程实现接收显示的创造socket和关闭socket可能更友好一些,使用菜单命令进行消息映射,把网络处理放在Doc类,至少比放在View更合理
      

  2.   

    多谢“哈哈人生”的回复。
    如果采用线程接收,接收到数据好,需要发送消息给主线程中的DOC类、VIEW类,POSTMESSAGE(或SENDMESSAGE)中的第一个参数(指向VIEW、DOC)又该如何得到?
      

  3.   

    关闭Socket最好放在OnClose或OnExitInstance之类的函数中。如果不关闭Socket就退出程序,程序会自动帮你关闭,不过有一定延时,很短。对C/S中的另一方来说,由于你没有通知对方你已经close socket,所以从C/S的一方退出到另一方知道你退出之间的延时就很明显了。