zoukankan      html  css  js  c++  java
  • TCP通信

      TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。

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

      ServerSocket对象负责监听某台计算机的某个端口号,在创建ServerSocket对象后,需要继续调用该对象的accept()方法,接收来自客户端的请求。当执行了accept()方法之后,服务器端程序会发生阻塞,直到客户端发出连接请求,accept()方法才会返回一个Scoket对象用于和客户端实现通信,程序才能继续向下执行。

      Socket类的常用方法中,getInputStream()getOutStream()方法分别用于获取输入流和输出流。

     * 实现TCP 服务器程序

     * 表示服务器程序的类 java.net.ServerSocket

     * 构造方法:

     *     ServerSocket(int port)传递端口号

     *     很重要的事情:必须要获得客户端的套接字对象Socket

     *     Socket accept()

     * 1,创建服务器ServerSocket对象(指定服务器端口号)

     * 2,开启服务器了,等待客户端的连接,当客户端连接后,可以获取到连接服务器的客户端Socket对象

     * 3,给客户端反馈信息

     * 4,关闭流资源

     */

     

     

     

     

    /*

     * 实现TCP 客户端连接到服务器

     * 和服务器实现数据交换

     * 实现TCP客户端程序的类 java.net.Soket

     * 构造方法

     *    Socket(String host,int port) 传递服务器IP和端口号

     *    注意:构造方法只要运行,就会和服务器进行连接,连接失败,抛出异常

     

     *    OutputStream   getOutputStream() 返回套接字的输出流

     *    作用:将数据输出,输出到服务器

     *    InputStream   getInputStream() 返回套接字的输入流

     *    作用:从服务器端读取数据

     

     *    客户端服务器数据交换,必须使用套接字对象Socket中的获取的IO流,自己new流,不行

     

     * 1,创建客户端Socket对象,(指定要连接的服务器地址与端口号)

     * 2,获取服务器端的反馈回来的信息

     * 3,关闭流资源

     */

    package com.oracle.demo03;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class TCPClient {
    //客户端
        public static void main(String[] args) throws IOException, IOException {
            // 创建客户端对象,明确要连接的服务器所在的IP地址和端口号
            Socket socket=new Socket("192.168.1.171",8888);
            //创建文件字节输入流,明确数据源
            FileInputStream fis=new FileInputStream("D:\io1227\a.png");
            //明确目的地
            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();
            //获取IP地址
            String ip=socket.getInetAddress().getHostAddress();
            len=in.read(bytes);
            System.out.println("ip地址为:"+ip+",发送的内容为:"+new String(bytes,0,len));
            //释放资源
            socket.close();
            fis.close();
        }
    
    }
    package com.oracle.demo03;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Random;
    
    public class TCPServer {
    //服务器端
        public static void main(String[] args) throws IOException {
            // 创建服务器对象,明确端口号
            ServerSocket server=new ServerSocket(8888);
            //创建连接并获取与我联接的客户端对象
            Socket socket=server.accept();
            //明确数据源
            InputStream in=socket.getInputStream();
            File file=new File("D:\upload");
            if(!file.exists()){
                file.mkdirs();
            }
            //封装文件名
            String filename="oracle"+System.currentTimeMillis()+new Random().nextInt(999999)+".png";
            FileOutputStream fos=new FileOutputStream(file+File.separator+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();
        }
    
    }
  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/longmingyeyu/p/12790732.html
Copyright © 2011-2022 走看看