22.2 TCP通信:客户端Socket类、服务端ServerSocket类、客户上传文件到服务器、模拟B\S服务器

目录

TCP通信程序

客户端Socket类

构造方法

成员方法

客户端ServerSocket类

构造方法

成员方法

列:客户端向服务器发送数据

列:从客户上传文件到服务器(基础版)

列:从客户上传文件到服务器(优化版)

模拟B\S服务器

列:服务器程序中字节输入流可以读取到浏览器发来的请求信息

列:模拟B\S服务器


TCP通信程序

TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。

  1. 客户端java.net.Socket 类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
  2. 服务端java.net.ServerSocket 类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接

客户端Socket类

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

构造方法

public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null ,则相当于指定地址为回送地址。

如果回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。 构造举例,代码如下:

Socket client = new Socket("127.0.0.1", 6666);

成员方法

- public InputStream getInputStream() : 返回此套接字的输入流。
  - 如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。
  - 关闭生成的InputStream也将关闭相关的Socket。
- public OutputStream getOutputStream() : 返回此套接字的输出流。
  - 如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。
  - 关闭生成的OutputStream也将关闭相关的Socket。
- public void close() :关闭此套接字。
  - 一旦一个socket被关闭,它不可再使用。
  - 关闭此socket也将关闭相关的InputStream和OutputStream 。 
- public void shutdownOutput() : 禁用此套接字的输出流。   
  - 任何先前写出的数据将被发送,随后终止输出流。 

客户端ServerSocket类

构造方法

  • public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。

     

成员方法

public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会一直阻塞直到建立连接

列:客户端向服务器发送数据

创建客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //1 创建客户端对象Socket,构造方法绑定服务器的ip地址和端口号
        Socket socket = new Socket("127.0.0.1", 8888);
        //2 使用Socket中的getOutputStream对象获取网络字节的输出流OutputStream对像
        OutputStream outputStream = socket.getOutputStream();
        //3 像服务器传输数据
        outputStream.write("你好,我是客户端".getBytes());
        //4 使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
        InputStream inputStream = socket.getInputStream();
        //5 接受网络数据
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new String(bytes,0,len));
        //6 释放资源
        socket.close();
    }
}

创建服务器

public class TCPServer {
    public static void main(String[] args) throws IOException {
        //1.创建服务器ServerSocket对象和系统要指定的端口号
        ServerSocket serverSocket = new ServerSocket(8888);
        //2 使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
        Socket socket = serverSocket.accept();
        //3 获取网络字节输入流getInputStream对象中的方法read,读取客户端发送的数据
        InputStream inputStream = socket.getInputStream();
        //4 读取资源
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new String(bytes,0,len));//输出客户端的信息
        //5 使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
        OutputStream outputStream = socket.getOutputStre
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值