码迷,mamicode.com
首页 > 其他好文 > 详细

socket 通讯 端口绑定 问题 解答

时间:2016-04-09 10:41:16      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:

如果想深入弄懂它的原理:建议阅读《UNIX网络编程》

socket,我们一般指的是长连接,但是原来还有短连接,正确的解释是:

1. 如果是短链接,使用同步socket。例如http服务器、转接服务器等等。

2. 如果是长链接,使用异步socket。例如通讯系统(QQ / Fetion)、webgame等。

 

介绍一下我的环境搭建:

1.一台手机,iphone手机,用来做客户端

2.一个模拟器,在Mac电脑端,iphone模拟器,用来做服务端

3.手机和模拟器都在同一个网段;

 

成功运行效果:

成功情况第一种设计:

1.客户端的IP设置为服务器的IP,端口设置的是服务器那边设置的绑定端口;

2.服务端IP设置为电脑Mac的真实IP内网地址+绑定的端口,端口由服务器自己设定;

成功情况第二种设计:

1.客户端的IP设置为服务器的IP,端口设置的是服务器那边设置的绑定端口;

2.服务端IP设置为接收所有的IP(设置的方法参考下面的代码)+绑定的端口,端口由服务器自己设定;

 

1.问:客户端和服务端什么时候需要绑定端口和IP,

2.问:客户端绑定端口的作用是什么?绑定IP的作用是什么?

3.问:服务端绑定端口的作用是什么?绑定IP的作用是什么?

  • 服务器绑定端口,是为了在这个端口提供服务;这么说的话,就是服务端会有很多不同的端口,提供不同的服务,所以必须绑定端口;
  • 服务器绑定IP,绑定服务器IP的目的是限制了服务端进程创建的socket只接受那些目的地为此IP地址的客户连接;限制了,就是说如果客户端的目的IP不是服务器,就无法和服务器通信;
  • 如果不想限制,做法是参考下面代码:
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

1.UDP连接用到的连接语法是:

sendto(),是把UDP数据报发给指定地址;struct sockaddr_in类型,指明UDP数据发往哪里报。

recvfrom(),是从指定地址接收UDP数据报。struct sockaddr_in类型,指明从哪里接收UDP数据报。

 

 

 

 

 

参考网友的环境搭建:不同的地方在于:

  一般网上说的都是同一个应用,如果是这样,服务端和客户端IP和端口的设置解释应该是:

  因为服务器是时时在监听有没有客户端的连接,如果服务器不绑定IP和端口的话,客户端上线的时候怎么连到服务器呢,所以服务器要绑定IP和端口,而客户端 就不需要了,客户端上线是主动向服务器发出请求的,因为服务器已经绑定了IP和端口,所以客户端上线的就向这个IP和端口发出请求,这时因为客户开始发数 据了(发上线请求),系统就给客户端分配一个随机端口,这个端口和客户端的IP会随着上线请求一起发给服务器,服务收到上线请求后就可以从中获起发此请求 的客户的IP和端口,接下来服务器就可以利用获起的IP和端口给客户端回应消息了。

 参考资料:http://blog.csdn.net/suxinpingtao51/article/details/11809011

socket 通讯 端口绑定 问题 解答

标签:

原文地址:http://www.cnblogs.com/williamliuwen/p/5370557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!