zoukankan      html  css  js  c++  java
  • socket 通讯 端口绑定 问题 解答

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

  • 相关阅读:
    几个带双下划线的宏
    WM_COPYDATA消息机制 不同进程间发送结构体数据
    解锁ubuntu系统的root
    申请堆空间函数封装(两种方法)
    UITableView的分页的加载
    UIView设置成圆角
    iPhone开发:类似iChat的聊天泡泡
    iPhone中如何自定义tabbar
    android 底部选项卡(TabHost)
    Android 多个Activity选项卡实现
  • 原文地址:https://www.cnblogs.com/williamliuwen/p/5370557.html
Copyright © 2011-2022 走看看