完成端口怎么不定时发送数据给每一个客户端?代码写在那里?例子里面,都是accept后,发送一个.
我的情况如下:
设备A->服务器B->client C;1.client C connect 服务器B;
2.服务器B收到设备A的数据后,发送给每一个客户端C?代码怎么写呀?

解决方案 »

  1.   

    B里面对每个Client C开个线程,利用线程同步,等待A里面的数据到了之后发送给C
      

  2.   

    完成端口还每个Client C开个线程?我是想问完成端口里面怎么写代码,因为看的都是例子.
      

  3.   

    用个数组保存所有的客户端的SOCKET_OBJ 指针每个提交一个发送IO不就行了.只是需要accept和close的地方需要注意一下,把数组的内容改掉.
      

  4.   

    跟EventSelect一样?
    能够给个例子吗[email protected]
      

  5.   

    完成端口发送数据只要调用InsertPendsend和PostSend两个函数就可以实现,无论在程序的什么地方都可以调用这两个函数来发送数据.
    你们所说的平时没有数据的时候都是挂起的,那时因为例子上写的是回应服务器,当然是没有数据来就不响应了.应该自己稍微修改一下完成端口的构架,主要是把他里面的那个IOORDER去掉,然后对发送部分也做一下修改.这样你只需要用一个客户端的socketobj指针就可以给该客户端发送数据了.注意,每个客户端的socketobj只有一个,但是bufferobj可以有好多.
    去掉了ioorder以后,接收到的数据可能会不按照原来发送的顺序,因为完成端口事件的返回不是一定按序的.
      

  6.   

    感谢Hellboy(int argc, char* argv[]) ,我试着改改,搞定了一定来给分.gdy119(中国制造) ,能告诉俺例子在那吗?我找了很多网站都没有.
      

  7.   

    为什么一定要去掉ioorder呢?能否直接再外面调用PostSend发送数据呢?大侠,能够给个例子吗?
      

  8.   

    关于IoOrder,Iocp的例子的源码全面已经附了说明,你可以自己看看。
    Iocp的例子只是一个回显服务器,加上IoOrder是为了将消息按照原来的顺序发送回去。
    但是这样做有个问题,每次PostSend都要加上前面PostRecv时候的IoOrder标志。
    每次只有收到一个消息了以后才能发送一个消息,如果你需要随时都能发送1条或者多条消息给客户端,那样要对IoOrder进行相应的修改.
      

  9.   

    Hellboy(int argc, char* argv[]) &gdy119(中国制造) 有代码的例子吗?或者那里可以找到[email protected]千恩万谢!
      

  10.   

    http://www.codeproject.com/internet/winsockiocp.asp这个例子好象不错,但是编译36个错误.大虾能否指点一下?
      

  11.   

    这里有例子
    http://www.wenyuan.com.cn/vs/Windows%CD%F8%C2%E7%B1%E0%B3%CC%B2%B9%B3%E4%B2%C4%C1%CF.zip建议你去看看<windows网络编程>这本书,上面的例子来自这本书的第二版.编译错误很可能是你的sdk版本没有更新过,
    http://www.microsoft.com/msdownload/platformsdk/sdkupdate/这里可以更新VC6.0的sdk,
    或者简单一点就安装VS.net来编译.如果是链接错误,那是由于你没有把ws_32.lib加入到Link的选项里面.
      

  12.   

    Thanks  Hellboy.我仔细看看<windows网络编程>我看的第1版,没有发送的例子.我用的就是VS.net,你那里能够编译通过我说的哪个例子吗?
      

  13.   

    codeproject的网页打不开,
    有问题应该是没有把ws_32.lib加入到Link的选项里面.
      

  14.   

    有email吗?我email给你.如果那么简单,俺就不会在这里丢人现眼了.郁闷.
      

  15.   

    我再说详细点吧,我从另外一个设备上面不停收到数据,加入CList DataList,怎么在完成模式里面不断的循环这个DataList,如果DataList不空,就把里面的数据发送出去呢?
      

  16.   

    加我msn吧:[email protected]
      

  17.   

    改改"回显"完成端口的例子就行了, WorkerThread的WSARecv参数改成对应的C就行了!
      

  18.   

    好的,马上加:)thanks Hellboy(int argc, char* argv[]) (对应的C?