一 socket简介
Socket 是进程通讯的一种方式, 即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换
几个定义:
(1) IP地址: 即依照TCP/IP协议分配给本地主机的网络地址, 两个进程要通讯, 任一进程首先要知道通讯对方的位置, 及对方的IP
(2) 端口号:用来辨别本地通讯进程, 一个本地的进程在通讯时均会占用一个端口号, 不同的进程端口号不同, 因此在通讯前必须要分配一个没有被访问的端口号.
(3) 连接: 指两个进程间的通讯链路
(4) 半相关:网络中用一个三元组可以在全局唯一标志一个进程:(协议,本地地址,本地端口号)
(5) 全相关: 一个完整的网间进程通信需要由两个进程组成, 并且只能使用同一种高层协议, 也就是说, 不可能通信的一端用TCP协议, 而另一段用UDP协议.因此一个完整的网间通讯需要一个五元组来标识: (协议, 本地地址, 本地端口号, 远地地址, 远地端口号)
这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。
// 端口为何物
端口包括物理端口和逻辑端口。物理端口是用于连接物理设备之间的接口,逻辑端口是逻辑上用于区分服务的端口。TCP/IP协议中的端口就是逻辑端口,通过不同的逻辑端口来区分不同的服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口。端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。
关于端口的介绍
http://baike.baidu.com/link?url=dIAVecb4CG3622ATr_6x1e_iHNzQ_XpFw6xPM8uXAwM7Z-liSgkG4a_fkhkjtI-xwyjWwGHxkFIgRrATsAwmg4z177p5TG_YBUKXByxaAfbz1bCej0Rkd_Whz2-nGbc8
二, 客户/服务器模式
在TCP/IP网络应用中, 通信的两个进程间相互作用的主要模式是客户?服务器(Client/Sever, C/S) 模式, 即客户向服务器发出服务请求, 服务器收到请求后, 提供相应的服务. 客户/服务器模式的建立基于以下两点:
(1)首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。 (2)其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。
服务器端:
其过程是首先服务器方要先启动,并根据请求提供相应服务:
(1)打开一通信通道并告知本地主机,它愿意在某一公认地址上的某端口(如FTP的端口可能为21)接收客户请求; (2)等待客户请求到达该端口;
(3)接收到客户端的服务请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。
(4)返回第(2)步,等待另一客户请求。
(5)关闭服务器
客户端:
(1)打开一通信通道,并连接到服务器所在主机的特定端口;
(2)向服务器发服务请求报文,等待并接收应答;继续提出请求......
(3)请求结束后关闭通信通道并终止。
从上面所描述过程可知:
(1)客户与服务器进程的作用是非对称的,因此代码不同。
(2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。
介绍完基础知识,下面就介绍一些API函数:
创建套接字 ——— socket()
什么是套接字
源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
应用程序在使用套接字前, 首先必须拥有一个套接字, 系统调用 socket() 向应用程序提供创建套接字的手段, 其调用格式如下:
有待跟新
//博主地址
http://acm.tzc.edu.cn/acmhome/projectList.do?method=projectNewsDetail&nid=2
//关于WebSocket的知识
http://www.tuicool.com/articles/7zyMvy6
http://zengrong.net/post/2199.htm
网友评论