TCP通信

1.服务器端

ServerSocket类

构造方法明确端口号

方法:accept()方法,连接发送端,获取Socket对象

Socket类

构造方法:明确ip和端口号

常用方法:

  getPort()获取端口号

  getLocalAddress()返回InetAddress对象

  close()释放资源

  getInputStream()返回输入流对象

  getOutputStream()返回输出流对象

TCP通信

    public static void main(String[] args) throws IOException {
        //创建客户端对象,明确要链接的服务器地址和端口号
        InetAddress inet=InetAddress.getByName("127.0.0.1");
        Socket socket=new Socket(inet,9999);
        //获取向服务器端发送数据的字节输出流
        OutputStream out=socket.getOutputStream();
        //写出字节
        out.write("你好".getBytes());
        //接收服务器的回复
        //获取数据源是服务器的字节输入流
        InputStream in=socket.getInputStream();
        byte[] bytes=new byte[1024];
        int len=in.read(bytes);
        //获取ip
        String ip=socket.getInetAddress().getHostAddress();
        //获取端口
        int port=socket.getPort();
        System.out.println("ip地址为:"+ip+",端口号为:"+port+",发送的内容为:"+new String(bytes,0,len));
        //释放资源
        socket.close();
    }
    public static void main(String[] args) throws IOException {
        //创建服务器端对象,明确端口号
        ServerSocket server=new ServerSocket(9999);
        //调用accept方法,与客户端建立链接,并获取与服务器链接的客户端对象
        Socket socket=server.accept();
        //获取数据源是客户端的字节输入流,接收客户端数据
        InputStream in=socket.getInputStream();
        //开始接收
        byte[] bytes=new byte[1024];
        int len=in.read(bytes);
        //获取服务器端ip
        String ip=socket.getInetAddress().getHostAddress();
        //获取端口号
        int port=socket.getPort();
        System.out.println("ip地址为:"+ip+",端口为:"+port+",发送的内容为:"+new String(bytes,0,len));
        //回复客户端
        //获取目的地是客户端的字节输出流
        OutputStream out=socket.getOutputStream();
        out.write("收到".getBytes());
        //关闭服务器释放资源
        server.close();
    }

TCP通信步骤

1.明确端口号和ip

2.创建字节输出流对象

3.写出字节

4.接收端,创建服务器对象,明确端口号

5.连接接收端,返回Socket对象

6.创建字节输入流对象

7.创建空数组,接收数据

8.输出数据

9.回复客户端,创建字节输出流,写出数据

10.使用空数组接收数据

11.输出数据

12.释放资源

TCP文件上传案例

    public static void main(String[] args) throws UnknownHostException, IOException {
        //创建客户端对象,明确要链接的服务器ip地址和端口号
        Socket socket=new Socket("192.168.1.171",9999);
        //创建文件字节输入流对象,明确数据源
        FileInputStream fis=new FileInputStream("/Users/air/io0803/a.jpg");
        //从socket对象中获取字节输出流,明确目的地
        OutputStream out=socket.getOutputStream();
        byte[] bytes=new byte[1024];
        int len=0;
        //开始复制
        while((len=fis.read(bytes))!=-1) {
            out.write(bytes,0,len);
        }
        //告诉服务器端别读了,结束了
        socket.shutdownOutput();
        //接收服务器端回复
        //获取字节输入流,明确数据源
        InputStream in=socket.getInputStream();
        len=in.read(bytes);
        System.out.println("服务器端发送的内容为:"+new String(bytes,0,len));
        //释放资源
        socket.close();
        fis.close();
    }
    public static void main(String[] args) throws IOException {
        //创建服务器端对象,明确端口
        ServerSocket server=new ServerSocket(9999);
        //调用accept方法,与客户端建立连接,并获取与我连接的客户端对象
        Socket socket=server.accept();
        //获取从socket对象中获取字节输入流,明确数据源
        InputStream in=socket.getInputStream();
        //创建目的地文件夹
        File file=new File("/Users/air/讲义/upload");
        //如果该文件夹不存在
        if(!file.exists()) {
            //创建该文件夹
            file.mkdirs();
        }
        //拼接目的地路径
        String name="oracle"+System.currentTimeMillis()+new Random().nextInt(10000)+".jpg";
        String filename=file+File.separator+name;
        //创建文件字节输出流,明确目的地
        FileOutputStream fos=new FileOutputStream(filename);
        //创建字节数组,开始复制
        byte[] bytes=new byte[1024];
        int len=0;
        while((len=in.read(bytes))!=-1) {
            fos.write(bytes,0,len);
        }
        //回复客户端
        //获取字节输出流,明确目的地
        OutputStream out=socket.getOutputStream();
        //写出字节
        out.write("收到".getBytes());
        //释放资源
        server.close();
        fos.close();
    }

TCP上传文件步骤:

1.明确端口号和IP地址,创建Socket对象

2.创建字节输入流对象,明确数据源

3.获取字节输出流对象,创建空数组

4.把文件写到流中

6.服务端创建服务器对象,明确端口号

7.连接客户端,返回Socket对象

8.获取字节输入流对象

9.创建字节输出流对象,明确目的地

10.明确文件名,目的地文件夹

11.开始复制文件到目的地

12.回复客户端,获取输出流对象

13.写出数据

14.客户端接收数据

15.客户端输出收到的数据

16.释放资源

posted @ 2020-11-09 11:50  杰斯-java  阅读(111)  评论(0)    收藏  举报