TCP通信

在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。

1.客户端向服务器端发送链接请求,等待服务器确认 2.服务器端向客户端发送了一个回应,通知客户端收到了请求 3.客户端再次向服务端发送请求,确认连接。

在JDK中提供了两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端,一个是Socket类,用于表示客户端。

通信时,先创建一个服务器类,开创一个服务,等待服务器端连接,创建客户端,客户端发送请求,服务器端回应请求,两端开始连接通信。

服务器类ServerSocket的构造方法指定了一个端口号port。该类的常用方法有

 

创建Serversocket对象调用accept()方法,用来接收客户端的请求,当接收到服务端的请求accept方法会返回一个socket对象,来实现与客户端的连接。

 JDK里面提供了一个socket类,来实现客户端类。该类的构造方法传一个String类型的ip地址和一个端口号

 

 

socket的常用方法如下

 

 

当客户端和服务端建立连接后,数据是以IO流的形式进行交互的,从而实现通信。

客户端向服务端发送请求我要发送数据了 服务收到请求 你发吧 服务端收到后反馈给客户端  我收到了 效果如图所示

 

 

 

我们来创建一下客户端和服务器端的通信。

创建客户端步骤:1.创建客户端对象 2.获得字节输出流对象 目的地是服务器端 3.发送数据 4.接收服务器端的回复 5.获得字节输入流,接收服务器端数据

创建服务器端步骤:1.创建服务器端对接,明确端口号 2.与客户端进行连接,获取与之连接的客户端对象 3.获得字节输入流,接收客户端发送的数据 4.回复客户端 获取字节输出流目的地是客户端 5发送数据释放资源

 

 

 

我们可以根据上述操作进一个扩展,客户端上传一个文件,服务接收文件并进行反馈,客户端多了几步操作 ,明确数据源和读取文件,我们发现文件输出流,服务器端读取的时候永远读不到-1 导致无法结束,所以我们在文件读取循环结束后,添加一个客户端shutdownoutput,来告知服务器别读了,已经结束了

服务器端明确目的地时要确认是否存在,不存在则新建一个文件夹,文件名我们可以添加多个条件,防止重名冲突,再明确文件输出流的路径。

posted @ 2021-03-03 11:48  Dyl啊  阅读(307)  评论(0)    收藏  举报