用WinSock编程,使用UDP协议是有一些困惑!
大家都知道TCP的Client和Server的分工是非常的明确的,Server首先在一个端口监听Client请求,
然后Accept请求,最后建立连接,Server分配一个新的端口通信,Server依旧使用原来的端口监听。Client一直就是请求建立连接然后通信。他们的行为是相当的明确和不同的。
UDP不需要建立连接,那么Server和Client的工作各是什么?Server和Client的工作有什么不同之处和相同之处?由于不需要建立连接,Server难道只使用一个端口和所有的Client通信吗?
大家都知道TCP的Client和Server的分工是非常的明确的,Server首先在一个端口监听Client请求,
然后Accept请求,最后建立连接,Server分配一个新的端口通信,Server依旧使用原来的端口监听。Client一直就是请求建立连接然后通信。他们的行为是相当的明确和不同的。
UDP不需要建立连接,那么Server和Client的工作各是什么?Server和Client的工作有什么不同之处和相同之处?由于不需要建立连接,Server难道只使用一个端口和所有的Client通信吗?
client不一定要bindServer难道只使用一个端口和所有的Client通信吗
=============
是的, 具体是哪一个client端,可以从recvfrom函数中获得.
就好像电台的播音,你可以用收音机调到相同的波段去接收,也可以不去理会
-----
是的,Client也一样。server和client没啥区别。
dns服务http服务等等都是这样的(木马好象有点不同)。
既然是被动接受请求的,那么服务端口就必须是固定的,否则客户端怎么进行连接呢?对于baojian的话:是的,Client也一样。server和client没啥区别。
我就不太明白什么意思!可能想叉了!
---
木马也是一样,包括所谓的反弹端口木马。
如果要接收服务器发送的返回的数据也需要bind,要不然服务器不知道该往哪里发送
addr.sin_port = htons(5150);
addr.sin_addr.s_addr = htonl(INADDR_ANY);bind(s,(sockaddr *)addr,sizeof(addr));以上的代码是什么意思?
为什么端口是本机的,ip确是发送端的ip
addr.sin_port = htons(5150);
addr.sin_addr.s_addr = htonl(INADDR_ANY);bind(s,(sockaddr *)addr,sizeof(addr));以上的代码是什么意思?
为什么端口是本机的,ip确是发送端的ip设置此socket用来接收5150端口发送来得数据。只有这样你才可以使用recv进行被动接收数据
addr.sin_addr.s_addr = htonl(INADDR_ANY);<<-- 是任意地址
addr.sin_port = htons(5150);服务器通信端口addr.sin_addr.s_addr = htonl(INADDR_ANY); 指定的通信地址是任意地址
好像对于UDP来说还真没多大C/S的区别
如果这样 addr.sin_addr.s_addr = 本机地址;
会有什么效果?
addr.sin_port = htons(5150);
addr.sin_addr.s_addr = htonl(INADDR_ANY);bind(s,(sockaddr *)addr,sizeof(addr));为什么端口是指定本机的端口,ip确是发送端的ip,
我可以把这句去掉吗?addr.sin_addr.s_addr = htonl(INADDR_ANY);
不能去掉。If an application does not care what local address is assigned, specify the manifest constant value ADDR_ANY for the sa_data member of the name parameter. This allows the underlying service provider to use any appropriate network address, potentially simplifying application programming in the presence of multihomed hosts (that is, hosts that have more than one network interface and address).
楼上的回答都是SHIT!TCP跟UDP的Bind都是在处理一件事情, 就是绑定相应的本地端口. TCP有面向连接的, 所以他需要一个Accept过程, 把对方的地址和端口连接一下.UDP是不可靠服务, 所以它的传输速度要高一下. UDP不是像上面所说的是广播协议, 这样说纯属扯淡. UDP跟TCP的区别是TCP在传输数据完成后, 要等对方发送回来ACK报文才能确认这次的传输成功了. UDP没有这一过程, 发送完数据就没事了. 针对你的问题, 可以这样想一下, UDP 的Client端由于没有绑定本地端口, 所以它发送数据时可以随意切换端口.UDP的SERVER端当然只能听一个端口. 跟TCP没有区别. 能拿到所有UDP报文的是在IP层处理里. 跟应用层没有关系.看你的意思, 可能你是不理解端口的概念. 端口在实现应用中是用于区分进程(或者线程)的. 是不是TCP的端口搅浑了????? 以为端口是区分一条连接的????阅读一下<<TCP/IP详解>>卷一, 这些问题都不是问题.