如果想深入弄懂它的原理:建议阅读《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