完成端口怎么不定时发送数据给每一个客户端?

时间:2021-11-25 08:00:32
完成端口怎么不定时发送数据给每一个客户端?

代码写在那里?

例子里面,都是accept后,发送一个.
我的情况如下:
设备A->服务器B->client C;

1.client C connect 服务器B;
2.服务器B收到设备A的数据后,发送给每一个客户端C?

代码怎么写呀?

29 个解决方案

#1


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

#2


对专门建个线程负责投递数据。

#3


完成端口还每个Client C开个线程?

我是想问完成端口里面怎么写代码,因为看的都是例子.

#4


关注

#5


用个数组保存所有的客户端的SOCKET_OBJ 指针每个提交一个发送IO不就行了.

只是需要accept和close的地方需要注意一下,把数组的内容改掉.

#6


跟EventSelect一样?
能够给个例子吗?

joybruse@21cn.com

#7


完成端口平时没有数据过来的时候他是挂起来的,只有收到对方的数据的时候才有线程活动来处理数据,你要是主动通过完成端口发送数据给对方的话就麻烦咯。

#8


我现在用的感觉也是如此,不会没有办法吧?

#9


完成端口发送数据只要调用InsertPendsend和PostSend两个函数就可以实现,无论在程序的什么地方都可以调用这两个函数来发送数据.
你们所说的平时没有数据的时候都是挂起的,那时因为例子上写的是回应服务器,当然是没有数据来就不响应了.

应该自己稍微修改一下完成端口的构架,主要是把他里面的那个IOORDER去掉,然后对发送部分也做一下修改.这样你只需要用一个客户端的socketobj指针就可以给该客户端发送数据了.

注意,每个客户端的socketobj只有一个,但是bufferobj可以有好多.
去掉了ioorder以后,接收到的数据可能会不按照原来发送的顺序,因为完成端口事件的返回不是一定按序的.

#10


up!好象这方面的例子很多

#11


感谢Hellboy(int argc, char* argv[]) ,我试着改改,搞定了一定来给分.

gdy119(中国制造) ,能告诉俺例子在那吗?我找了很多网站都没有.

#12


关注

#13


为什么一定要去掉ioorder呢?

能否直接再外面调用PostSend发送数据呢?

大侠,能够给个例子吗?

#14


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

#15


Hellboy(int argc, char* argv[]) &gdy119(中国制造) 

有代码的例子吗?或者那里可以找到?

joybruse@21cn.com

千恩万谢!

#16


http://www.codeproject.com/internet/winsockiocp.asp

这个例子好象不错,但是编译36个错误.大虾能否指点一下?

#17


这里有例子
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的选项里面.

#18


Thanks  Hellboy.我仔细看看

<windows网络编程>我看的第1版,没有发送的例子.

我用的就是VS.net,你那里能够编译通过我说的哪个例子吗?

#19


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

#20


有email吗?我email给你.

如果那么简单,俺就不会在这里丢人现眼了.郁闷.

#21


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

#22


up

#23


加我msn吧:archonzhao@hotmail.com

#24


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

#25


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

对应的C?

#26


我也遇到类似的问题,一直不知道怎么做啊,各位大侠,给一个完整可以用的例子,好吗?比如多人聊在的,一个在线人员,能过完成端口的服务器,可以同时转发给多个在线的人员,看了上来的问题,以及如何保证在多人时发送的顺序不会乱呢?我可以在重新开贴,给大家给分.希望给点实例有用的例子.500分

#27


up

#28


up

#29


mark

#1


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

#2


对专门建个线程负责投递数据。

#3


完成端口还每个Client C开个线程?

我是想问完成端口里面怎么写代码,因为看的都是例子.

#4


关注

#5


用个数组保存所有的客户端的SOCKET_OBJ 指针每个提交一个发送IO不就行了.

只是需要accept和close的地方需要注意一下,把数组的内容改掉.

#6


跟EventSelect一样?
能够给个例子吗?

joybruse@21cn.com

#7


完成端口平时没有数据过来的时候他是挂起来的,只有收到对方的数据的时候才有线程活动来处理数据,你要是主动通过完成端口发送数据给对方的话就麻烦咯。

#8


我现在用的感觉也是如此,不会没有办法吧?

#9


完成端口发送数据只要调用InsertPendsend和PostSend两个函数就可以实现,无论在程序的什么地方都可以调用这两个函数来发送数据.
你们所说的平时没有数据的时候都是挂起的,那时因为例子上写的是回应服务器,当然是没有数据来就不响应了.

应该自己稍微修改一下完成端口的构架,主要是把他里面的那个IOORDER去掉,然后对发送部分也做一下修改.这样你只需要用一个客户端的socketobj指针就可以给该客户端发送数据了.

注意,每个客户端的socketobj只有一个,但是bufferobj可以有好多.
去掉了ioorder以后,接收到的数据可能会不按照原来发送的顺序,因为完成端口事件的返回不是一定按序的.

#10


up!好象这方面的例子很多

#11


感谢Hellboy(int argc, char* argv[]) ,我试着改改,搞定了一定来给分.

gdy119(中国制造) ,能告诉俺例子在那吗?我找了很多网站都没有.

#12


关注

#13


为什么一定要去掉ioorder呢?

能否直接再外面调用PostSend发送数据呢?

大侠,能够给个例子吗?

#14


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

#15


Hellboy(int argc, char* argv[]) &gdy119(中国制造) 

有代码的例子吗?或者那里可以找到?

joybruse@21cn.com

千恩万谢!

#16


http://www.codeproject.com/internet/winsockiocp.asp

这个例子好象不错,但是编译36个错误.大虾能否指点一下?

#17


这里有例子
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的选项里面.

#18


Thanks  Hellboy.我仔细看看

<windows网络编程>我看的第1版,没有发送的例子.

我用的就是VS.net,你那里能够编译通过我说的哪个例子吗?

#19


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

#20


有email吗?我email给你.

如果那么简单,俺就不会在这里丢人现眼了.郁闷.

#21


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

#22


up

#23


加我msn吧:archonzhao@hotmail.com

#24


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

#25


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

对应的C?

#26


我也遇到类似的问题,一直不知道怎么做啊,各位大侠,给一个完整可以用的例子,好吗?比如多人聊在的,一个在线人员,能过完成端口的服务器,可以同时转发给多个在线的人员,看了上来的问题,以及如何保证在多人时发送的顺序不会乱呢?我可以在重新开贴,给大家给分.希望给点实例有用的例子.500分

#27


up

#28


up

#29


mark