UDP协议,多客户端网络问题?

yangx 2011-03-09 11:46:09
很菜 ,没做过网络方面程序,请教个问题 先谢谢。
一个主机,10个左右设备,UDP协议,设备5分钟左右(时间间隔随机)向主机发数据,主机处理数据然后回应,数据量很小(20字节)。
参照网上的资料写了段 基于MFC的UDP程序:
创建一个CAsyncSocket子类对象,然后通过Create函数设定端口号和协议类型为 SOCK_DGRAM,通过SendTo函数发送数据,通过ReceiveFrom接收数据。接两个设备通信正常。
问题:若两个以上设备同时向主机发数据包,主机还能正常接收、回应吗?
若不能,该怎样改程序?
...全文
284 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenxy1 2011-03-17
  • 打赏
  • 举报
回复
直接用socket API来写,多好。
relive007 2011-03-17
  • 打赏
  • 举报
回复
使用UDP,一个端口够用了,10个设备不成问题。所谓同时反应,其实还是有时间差距的,只是时间非常短,可以认为是同时。写程序时可以用事件选择模型或者overlapped i/o。CAsyncSocket是要经过窗口消息循环的吧?可以查一下,如果是,则不建议使用。
友林 2011-03-14
  • 打赏
  • 举报
回复
需要个简单的通讯协议,
比如客户端发起连接请求 bind命令
服务器收到该命令的回复bindres命令
此时:A服务器,维护客户端连接链表
B客户端开接收到bindres开始发送实际数据。
客户端发送完毕后向服务器端发送断开命令unbind
服务器收到该命令回复unbindres命令
此时:A服务器,从客户端链表中删除当前的客户端
B客户端逻辑断开连接。
Eleven 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yangx 的回复:]
引用 11 楼 visualeleven 的回复:

引用 10 楼 yangx 的回复:
oyljerry,链表没用过,不知怎么用

sichuanpb,你指的是识别那个设备吗?那到不用,数据包里有IP 和端口号

就是你的服务器端维护客户端的SOCKET连接,删除或者添加,比如accept以后,就要添加,客户端closesocket了以后,你就要删除

UDP程序,不存在连接……
[/Quote]
Sorry,看错了,你保存客户端的SOCKADD_IN地址
MervynChina 2011-03-14
  • 打赏
  • 举报
回复
开放一个端口足够了,也就这么二十台机器嘛!发送数据时,在客户机上发送数据中,UDP信息头就可以包含客户机的端口号和IP地址,服务器端记下IP和端口号,以此回应。
yanghehong 2011-03-13
  • 打赏
  • 举报
回复
在这个通信中,主机相当于服务端,设备是客户端。
服务端,也就是主机,开一个UDP端口就可以够用。

主机 每次通过ReceiveFrom接收UDP数据的时候,除了返回数据,它也返回对端的IP和UDP端口,你记下来,就可以用IP+UDP端口的组合来标志对应的设备了,也就可以针对某一个具体设备做回应了。

至于设备损害或不再需要与主机通信的情况,则可以让主机定时发一自定义的很小的UDP包做心跳,来知道设备是死是活。

- 千里孤行
zk0233 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yangx 的回复:]
先谢谢楼上各位
明白了,以前做过RS485,只能主从方式通信。
实验怎么做,让两个设备同时发?

再问个问题,主机端为每个设备开一个端口好 还是 只开一个端口好?
[/Quote]

感觉开一个端口够用了
yangx 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 yangx 的回复:]
很菜 ,没做过网络方面程序,请教个问题 先谢谢。
一个主机,10个左右设备,UDP协议,设备5分钟左右(时间间隔随机)向主机发数据,主机处理数据然后回应,数据量很小(20字节)。
参照网上的资料写了段 基于MFC的UDP程序:
创建一个CAsyncSocket子类对象,然后通过Create函数设定端口号和协议类型为 SOCK_DGRAM,通过SendTo函数发送数据,通过Receiv……
[/Quote]
这程序结构怎样 会比较稳定?
yangx 2011-03-10
  • 打赏
  • 举报
回复
1楼,谢谢。能解释一下吗
jwybobo2007 2011-03-10
  • 打赏
  • 举报
回复
能,可以正常接收回应
yangx 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 visualeleven 的回复:]

引用 10 楼 yangx 的回复:
oyljerry,链表没用过,不知怎么用

sichuanpb,你指的是识别那个设备吗?那到不用,数据包里有IP 和端口号

就是你的服务器端维护客户端的SOCKET连接,删除或者添加,比如accept以后,就要添加,客户端closesocket了以后,你就要删除
[/Quote]
UDP程序,不存在连接,也不用accept
Eleven 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yangx 的回复:]
oyljerry,链表没用过,不知怎么用

sichuanpb,你指的是识别那个设备吗?那到不用,数据包里有IP 和端口号
[/Quote]
就是你的服务器端维护客户端的SOCKET连接,删除或者添加,比如accept以后,就要添加,客户端closesocket了以后,你就要删除
yangx 2011-03-10
  • 打赏
  • 举报
回复
oyljerry,链表没用过,不知怎么用

sichuanpb,你指的是识别那个设备吗?那到不用,数据包里有IP 和端口号
sichuanwww 2011-03-10
  • 打赏
  • 举报
回复
可以通过不同端口来识别。
oyljerry 2011-03-10
  • 打赏
  • 举报
回复
服务端用一个里链表来维护连接的客户端,然后就可以通信了
yangx 2011-03-10
  • 打赏
  • 举报
回复
先谢谢楼上各位
明白了,以前做过RS485,只能主从方式通信。
实验怎么做,让两个设备同时发?

再问个问题,主机端为每个设备开一个端口好 还是 只开一个端口好?

Eleven 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 yangx 的回复:]
很菜 ,没做过网络方面程序,请教个问题 先谢谢。
一个主机,10个左右设备,UDP协议,设备5分钟左右(时间间隔随机)向主机发数据,主机处理数据然后回应,数据量很小(20字节)。
参照网上的资料写了段 基于MFC的UDP程序:
创建一个CAsyncSocket子类对象,然后通过Create函数设定端口号和协议类型为 SOCK_DGRAM,通过SendTo函数发送数据,通过ReceiveF……
[/Quote]
你可以实践一下嘛
zxq19781221 2011-03-10
  • 打赏
  • 举报
回复
看一下CSMA/CD
hurryboylqs 2011-03-10
  • 打赏
  • 举报
回复
可以,回应的时候朝着那个地址发送数据即可
shenyi0106 2011-03-10
  • 打赏
  • 举报
回复
请去查看一下CSMA/CD(带冲突检测的载波监听多路访问)

18,356

社区成员

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

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