代码写在那里?
例子里面,都是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的地方需要注意一下,把数组的内容改掉.
只是需要accept和close的地方需要注意一下,把数组的内容改掉.
#6
跟EventSelect一样?
能够给个例子吗?
joybruse@21cn.com
能够给个例子吗?
joybruse@21cn.com
#7
完成端口平时没有数据过来的时候他是挂起来的,只有收到对方的数据的时候才有线程活动来处理数据,你要是主动通过完成端口发送数据给对方的话就麻烦咯。
#8
我现在用的感觉也是如此,不会没有办法吧?
#9
完成端口发送数据只要调用InsertPendsend和PostSend两个函数就可以实现,无论在程序的什么地方都可以调用这两个函数来发送数据.
你们所说的平时没有数据的时候都是挂起的,那时因为例子上写的是回应服务器,当然是没有数据来就不响应了.
应该自己稍微修改一下完成端口的构架,主要是把他里面的那个IOORDER去掉,然后对发送部分也做一下修改.这样你只需要用一个客户端的socketobj指针就可以给该客户端发送数据了.
注意,每个客户端的socketobj只有一个,但是bufferobj可以有好多.
去掉了ioorder以后,接收到的数据可能会不按照原来发送的顺序,因为完成端口事件的返回不是一定按序的.
你们所说的平时没有数据的时候都是挂起的,那时因为例子上写的是回应服务器,当然是没有数据来就不响应了.
应该自己稍微修改一下完成端口的构架,主要是把他里面的那个IOORDER去掉,然后对发送部分也做一下修改.这样你只需要用一个客户端的socketobj指针就可以给该客户端发送数据了.
注意,每个客户端的socketobj只有一个,但是bufferobj可以有好多.
去掉了ioorder以后,接收到的数据可能会不按照原来发送的顺序,因为完成端口事件的返回不是一定按序的.
#10
up!好象这方面的例子很多
#11
感谢Hellboy(int argc, char* argv[]) ,我试着改改,搞定了一定来给分.
gdy119(中国制造) ,能告诉俺例子在那吗?我找了很多网站都没有.
gdy119(中国制造) ,能告诉俺例子在那吗?我找了很多网站都没有.
#12
关注
#13
为什么一定要去掉ioorder呢?
能否直接再外面调用PostSend发送数据呢?
大侠,能够给个例子吗?
能否直接再外面调用PostSend发送数据呢?
大侠,能够给个例子吗?
#14
关于IoOrder,Iocp的例子的源码全面已经附了说明,你可以自己看看。
Iocp的例子只是一个回显服务器,加上IoOrder是为了将消息按照原来的顺序发送回去。
但是这样做有个问题,每次PostSend都要加上前面PostRecv时候的IoOrder标志。
每次只有收到一个消息了以后才能发送一个消息,如果你需要随时都能发送1条或者多条消息给客户端,那样要对IoOrder进行相应的修改.
Iocp的例子只是一个回显服务器,加上IoOrder是为了将消息按照原来的顺序发送回去。
但是这样做有个问题,每次PostSend都要加上前面PostRecv时候的IoOrder标志。
每次只有收到一个消息了以后才能发送一个消息,如果你需要随时都能发送1条或者多条消息给客户端,那样要对IoOrder进行相应的修改.
#15
Hellboy(int argc, char* argv[]) &gdy119(中国制造)
有代码的例子吗?或者那里可以找到?
joybruse@21cn.com
千恩万谢!
有代码的例子吗?或者那里可以找到?
joybruse@21cn.com
千恩万谢!
#16
http://www.codeproject.com/internet/winsockiocp.asp
这个例子好象不错,但是编译36个错误.大虾能否指点一下?
这个例子好象不错,但是编译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的选项里面.
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,你那里能够编译通过我说的哪个例子吗?
<windows网络编程>我看的第1版,没有发送的例子.
我用的就是VS.net,你那里能够编译通过我说的哪个例子吗?
#19
codeproject的网页打不开,
有问题应该是没有把ws_32.lib加入到Link的选项里面.
有问题应该是没有把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?
对应的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的地方需要注意一下,把数组的内容改掉.
只是需要accept和close的地方需要注意一下,把数组的内容改掉.
#6
跟EventSelect一样?
能够给个例子吗?
joybruse@21cn.com
能够给个例子吗?
joybruse@21cn.com
#7
完成端口平时没有数据过来的时候他是挂起来的,只有收到对方的数据的时候才有线程活动来处理数据,你要是主动通过完成端口发送数据给对方的话就麻烦咯。
#8
我现在用的感觉也是如此,不会没有办法吧?
#9
完成端口发送数据只要调用InsertPendsend和PostSend两个函数就可以实现,无论在程序的什么地方都可以调用这两个函数来发送数据.
你们所说的平时没有数据的时候都是挂起的,那时因为例子上写的是回应服务器,当然是没有数据来就不响应了.
应该自己稍微修改一下完成端口的构架,主要是把他里面的那个IOORDER去掉,然后对发送部分也做一下修改.这样你只需要用一个客户端的socketobj指针就可以给该客户端发送数据了.
注意,每个客户端的socketobj只有一个,但是bufferobj可以有好多.
去掉了ioorder以后,接收到的数据可能会不按照原来发送的顺序,因为完成端口事件的返回不是一定按序的.
你们所说的平时没有数据的时候都是挂起的,那时因为例子上写的是回应服务器,当然是没有数据来就不响应了.
应该自己稍微修改一下完成端口的构架,主要是把他里面的那个IOORDER去掉,然后对发送部分也做一下修改.这样你只需要用一个客户端的socketobj指针就可以给该客户端发送数据了.
注意,每个客户端的socketobj只有一个,但是bufferobj可以有好多.
去掉了ioorder以后,接收到的数据可能会不按照原来发送的顺序,因为完成端口事件的返回不是一定按序的.
#10
up!好象这方面的例子很多
#11
感谢Hellboy(int argc, char* argv[]) ,我试着改改,搞定了一定来给分.
gdy119(中国制造) ,能告诉俺例子在那吗?我找了很多网站都没有.
gdy119(中国制造) ,能告诉俺例子在那吗?我找了很多网站都没有.
#12
关注
#13
为什么一定要去掉ioorder呢?
能否直接再外面调用PostSend发送数据呢?
大侠,能够给个例子吗?
能否直接再外面调用PostSend发送数据呢?
大侠,能够给个例子吗?
#14
关于IoOrder,Iocp的例子的源码全面已经附了说明,你可以自己看看。
Iocp的例子只是一个回显服务器,加上IoOrder是为了将消息按照原来的顺序发送回去。
但是这样做有个问题,每次PostSend都要加上前面PostRecv时候的IoOrder标志。
每次只有收到一个消息了以后才能发送一个消息,如果你需要随时都能发送1条或者多条消息给客户端,那样要对IoOrder进行相应的修改.
Iocp的例子只是一个回显服务器,加上IoOrder是为了将消息按照原来的顺序发送回去。
但是这样做有个问题,每次PostSend都要加上前面PostRecv时候的IoOrder标志。
每次只有收到一个消息了以后才能发送一个消息,如果你需要随时都能发送1条或者多条消息给客户端,那样要对IoOrder进行相应的修改.
#15
Hellboy(int argc, char* argv[]) &gdy119(中国制造)
有代码的例子吗?或者那里可以找到?
joybruse@21cn.com
千恩万谢!
有代码的例子吗?或者那里可以找到?
joybruse@21cn.com
千恩万谢!
#16
http://www.codeproject.com/internet/winsockiocp.asp
这个例子好象不错,但是编译36个错误.大虾能否指点一下?
这个例子好象不错,但是编译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的选项里面.
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,你那里能够编译通过我说的哪个例子吗?
<windows网络编程>我看的第1版,没有发送的例子.
我用的就是VS.net,你那里能够编译通过我说的哪个例子吗?
#19
codeproject的网页打不开,
有问题应该是没有把ws_32.lib加入到Link的选项里面.
有问题应该是没有把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?
对应的C?
#26
我也遇到类似的问题,一直不知道怎么做啊,各位大侠,给一个完整可以用的例子,好吗?比如多人聊在的,一个在线人员,能过完成端口的服务器,可以同时转发给多个在线的人员,看了上来的问题,以及如何保证在多人时发送的顺序不会乱呢?我可以在重新开贴,给大家给分.希望给点实例有用的例子.500分
#27
up
#28
up
#29
mark