【网络编程】TCP通信程序-文件上传实例和BS案例

TCP通信程序

能实现TCP通信的Java程序

  • 概述:

    • TCP通信能是实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)和服务端(Server)
    • 面向连接的通信,客户端和服务端必须经过3次握手,建立逻辑连接,才能通信(安全)
    • 建立逻辑连接,这个连接包含一个对象,也就是IO对象,客户端和服务端就是通过这个IO对象进行通信。
    • 因为通信的数据不仅仅是字符,所以IO对象是字节流对象
    • 客户端和服务端进行一个数据交互需要4个IO流对象
      在这里插入图片描述
  • 两端通信的步骤:

    • 1、服务端程序,需要事前启动,等待客户端的连接(请求)
    • 2、客户端主动连接服务端,连接成功才能通信,服务端不可以主动连接客户端
  • 在Java中,提供了两个类用于实现TCP通信程序

    • 客户端:java.net.Socket类表示。创建Socket对象,向服务端发送连接请求,服务端响应请求,两者建立连接开始通信
    • 服务端:java.net.ServerSocket类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。
  • 问题1:多个客户端同时连接一个服务端,这时就会面临一个问题,服务端必须明确这个时刻和哪个客户端连接。

    • 在服务端有一个方法,叫accept,可以获取请求的客户端对象
  • 问题2:多个客户端同时和服务器进行交互,就需要使用多个IO对象

    • 服务端是没有IO流的,服务端可以获取到请求的客户端对象Socket,使用每个客户端Socket中提供的IO流和客户端进行交互。
      在这里插入图片描述
      也就是说:服务端使用客户端1的流跟客户端交互,使用客户端2的流跟客户端2交互。

Socket类(java.net)

Socket类:该类实现客户端套接字,套接字指的是两台设备之间的通讯的端点。

构造方法

  • pubic Socket(String host,int port):创建套接字对象并将其连接到指定主机上的指定库端口号。
  • 如果指定的host是null,则相当于指定地址为本机回送地址。
  • Socket client =new Socket("127.0.0.1",6666);

成员方法

  • OutputStream getOutputSteam()返回此套接字的输出流
  • InputStream getInputStream()返回此套接字的输入流
  • void close()关闭此套接字
    在这里插入图片描述

实现步骤

在这里插入图片描述

ServerSocket类

ServerSocket类:此类实现服务器套接字

构造方法

  • ServerSocket(int port):创建绑定到特定端口的服务器套接字

成员方法

因为服务器必须要明确一件事,必须的知道是哪个客户端请求的服务端,所以可以使用accept方法获取到请求的客户端对象Socket

  • Socket accept():侦听并接收此套接字的连接
    -

实现步骤

在这里插入图片描述

在这里插入图片描述

文件上传的原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

服务端文件

在这里插入图片描述
在这里插入图片描述

程序阻塞原因read读不到-1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决:
在这里插入图片描述

文件上传优化

在这里插入图片描述
在这里插入图片描述

run是重写的,run父类没有抛出异常,所以子类也不能声明抛出异常,只能用try…catch。
不用关闭

创建BS版本的TCP服务器

B是指浏览器
在这里插入图片描述
在客户端:浏览器访问8080,也就是上面的服务器
在这里插入图片描述
在这里插入图片描述
把网络字节输入流转成字符缓冲流
在这里插入图片描述

在这里插入图片描述
每一个图片都开启一个线程请求一次,(网络开销)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值