java网络编程之TCP协议

TCP协议的特点 

            面向连接的协议(有发送端就一定要有接收端)

             通过三次连接握手建立连接

             通过四次握手断开连接

             基于IO流传输数据

             传输数据大小没有限制

             速度慢但可靠

  

 TCP协议相关的两个类

     Socket(一个socket对象表示一个客户端对象)

           常用构造方法介绍

                         Socket(String host, int  port)

                                    host参数为服务器的ip地址字符串

                                     port参数为服务器的端口号

                  大家记忆的时候可以使用这一种记忆方式记住socket是个客户端对象就可以了,参数就想socket对象既然是客户端对象他就需要连接服务器,那么他需要什么呢,连接服务器肯定需要服务端的IP和地址才能够连接。

            

              常用方法介绍

OutputStream    getOutputStream()获取字节输出流(该字节输出可以向服务端输出数据,只能获取一次,调用该方法多少次,获取到的还是同一个对象
InputStream   getInputStream()获取字节输入流(该字节输入流可以读取服务器端方式过来的数据,只能获取一次,调用该方法多少次,获取到的还是同一个对象
void   shutdownOutputStream()关闭输出流(在socket里面作用就是告诉服务器端,数据已经传输完成,调用该方法以后获取到的输出流就不能使用了
void  close()关闭资源
int  getPort()获取服务器端的端口

InetAddress getInetAddress()

获取服务器端的IP地址对象

         

       ServerSocket(一个该类对象就代表一个服务端对象)

                    常用构造方法介绍

                           ServerSocket(int port)

                                      port参数为服务端的端口号

                    常用方法介绍

Socket  accept()等待客户端连接,获取一个客户端对象
InteAddress    getInteAdderss()获取连接的客户端的ip对象

       

TCP协议实现服务端和客户端文件上传代码

          客户端代码

  //创建客户端对象           设置要连接服务器的ip  和服务器的端口
        Socket socket = new Socket("127.0.0.1", 8888);
        //创建inputStream读取本地文件
        FileInputStream fileInputStream = new FileInputStream("C:\\aaa\\aaa.jpg");
        //通过客户端对象获得输出流  可以输出数据服务端
        OutputStream outputStream = socket.getOutputStream();
        //通过客户端对象获取输入流对象可以读取服务端发送过来的数据
        InputStream inputStream = socket.getInputStream();
        //获取ip地址对象
        InetAddress inetAddress = socket.getInetAddress();
        System.out.println("已连接到服务器:"+inetAddress.getHostName());
        
        
        //------------------io流读取文件部分
        int len = 0;
        byte[] bs = new byte[1024];
           //读取本地文件  
        while ( (len = fileInputStream.read(bs))!= -1){
            //输出到服务器
            outputStream.write(bs,0,len);
        }
        //格式服务器端   客户端数据已经传输完毕
        socket.shutdownOutput();
        System.out.println("文件上传已完成,等待服务器返回成功信息.....");
        
        //创建字节数组保存服务器发送过来的数据
        byte[] bytes = new byte[1024];
        //读取服务端发送过来的数据
        int length = inputStream.read(bytes);
        //输出到控制台
        System.out.println(new String(bytes,0,length));

        //关闭资源
        fileInputStream.close();
        socket.close();

      

       服务端代码

 

 //创建服务端对象   设置服务端端口
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器已经启动。。。。。。。");
        
        //等待客户端连接  获取客户端对象
        Socket socket = serverSocket.accept();
        //获取输入和输出流   用来读取和输出数据到客户端
        OutputStream outputStream = socket.getOutputStream();
        InputStream inputStream = socket.getInputStream();
        //获取客户端ip地址对象
        InetAddress inetAddress = socket.getInetAddress();
        
        //新建输出流 保存客户端传输过来的数据
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\aaa\\aa.jpg");
        System.out.println("客户端:"+inetAddress.getHostName()+"  已连接");
        
        
        byte[] bytes = new byte[1024];
        int length = 0;
            // 读取客户端传输过来的数据
        while ((length=inputStream.read(bytes))!=-1){
            //保存客户端文件数据到硬盘
            fileOutputStream.write(bytes,0,length);
        }
        System.out.println("客户端上传文件成功。。。。");
       
        //输出数据到客户端  提示客户端口文件传输成功
        outputStream.write("恭喜你,文件上传成功。。。。".getBytes());

        //关闭资源
        fileOutputStream.close();
        socket.close();
        serverSocket.close();

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值