Socket编程与客户/服务器应用开发

一、Socket简介
Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。
几个定义:
(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。
(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号。
(3)连接:指两个进程间的通讯链路。
(4)半相关:网络中用一个三元组可以在全局唯一标志一个进程:
(协议,本地地址,本地端口号)
这样一个三元组,叫做一个半相关,它指定连接的每半部分。
(4)全相关:一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:
(协议,本地地址,本地端口号,远地地址,远地端口号)
这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。
二、客户/服务器模式
在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器(Client/Server, C/S)模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:
(1)首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。
(2)其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。
服务器端:
其过程是首先服务器方要先启动,并根据请求提供相应服务:
(1)打开一通信通道并告知本地主机,它愿意在某一公认地址上的某端口(如FTP的端口可能为21)接收客户请求;
(2)等待客户请求到达该端口;
(3)接收到客户端的服务请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。
(4)返回第(2)步,等待另一客户请求。
(5)关闭服务器
客户端:
(1)打开一通信通道,并连接到服务器所在主机的特定端口;
(2)向服务器发服务请求报文,等待并接收应答;继续提出请求…
(3)请求结束后关闭通信通道并终止。
从上面所描述过程可知:
(1)客户与服务器进程的作用是非对称的,因此代码不同。
(2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止

客户机/服务器应用程序模型通常被看作是位于远处的,高功率计算装置,其存储大量数据的业务逻辑。而用户界面在相对便宜的机器上由客户端软件进行处理。这种观点有些模糊,因为任何服务机器的请求可能会被称为服务器。尽管服务器等待客户端开始对话,在某些情况下,在同一个程序既可以充当客户端也可以作为服务器。 从这个意义上说,一台机器可以作为网络客户端进行通信,也可经过一个TCP/IP协议栈的层在服务器程序之间进行通信。 一个套接是由操作系统所提供的一个API,以实现连接。 该packagejava.net提供了必要的元素,以实现两个最上面的TCP/IP层之间的接口通信:应用和传输。本文阐述了客户机/服务器模式背后的理念,关于创建Java中的TCP客户机/服务器应用程序的详细信息。
客户端套接基础知识
Socket是建立了两台主机之间的连接端点。 Java中提供的Socket类既可用于客户端和也可用于服务器。 基本操作领域如下:
• 连接到远程主机。
• 发送和接收数据。
• 关闭连接。
• 绑定到一个端口。
• 监听传入的数据。
• 在有限的端口上接受远程连接。
最后三个操作仅特定于服务器;它们由ServerSocket类实现。客户端程序工作流以如下方式出现:
1. 创建一个新的Socket对象。
2. 尝试连接到远程主机
3. 一旦连接成功,本地和远程主机可保持输入和输出流,并且可以在全双工模式下工作。 接收和发送的数据具有不同的意义,根据所使用的协议(从FTP服务器发送/接收数据会与HTTP服务器不同)。通常,在随数据传输之后有某种协议。
4. Sockets必须在传输完成后封闭两端。某些协议,如HTTP,可确保连接在每次请求服务时被关闭。而另一方面,FTP允许在关闭连接之前处理多个请求。
————————————————
版权声明:本文为CSDN博主「啥也爱吃」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43775686/article/details/103378261

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值