Socket编程

来源:互联网 发布:怎么投稿小说知乎 编辑:程序博客网 时间:2024/05/16 07:19
一.概述
  • 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一段称为socket.
  • Socket本质上是编程接口API,是对TCP/IP的封装,TCP/IP也会提供给程序员的编程接口,这就是Socket编程接口。HTTP是轿车,提供了封装或者显示数据的具体形式,Socket是发动机,提供了网络通信的能力
     -TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口,就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口
二、Socket连接过程
(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态
(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求
(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求
三、端口认识
  • 一个指定的端口号不能被多个程序共用。比如,如果IIS占用了80端口,那么Apache就不能也用80端口了
  • 很多防火墙只允许特定目标端口的数据包通过
  • 服务程序在listen某个端口并accept某个连接请求后,会生成一个新的socket来对该请求进行处理
  • 如果一个程序创建了一个socket,并让其监听80端口,其实是向TCP/IP协议栈声明了其对80端口的占有,以后,所有目标是80端口的TCP数据包都会转发给该程序
  • 所谓accept函数,其实抽象的是TCP的连接建立过程。accept函数返回的新socket其实指代的是本次创建的连接,而一个连接是包括两部分信息的,一个是源IP和源端口,另一个是宿IP和宿端口。所以,accept可以产生多个不同的socket,而这些socket里包含的宿IP和宿端口是不变的,变化的只是源IP和源端口。这样的话,这些socket宿端口就可以都是80,而Socket层还是能根据源/宿对来准确地分辨出IP包和socket的归属关系,从而完成对TCP/IP协议的操作封装
0 0
原创粉丝点击