zoukankan      html  css  js  c++  java
  • TCP通信的实现代码

    TCP通信

    概念

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

    从百科定义中就可以看出,TCP通信的基本条件是连接,传输的是字节流。

    • 通信基本流程(类似打招呼的方式):
      1.三次握手
      2.四次挥手

    客户端

        //客户端
        public class TCPDemo01 {
            public static void main(String[] args) throws Exception {
                //1.要知道服务器的ip,端口号
                InetAddress ip = InetAddress.getByName("127.0.0.1");//ip
                int port = 9999;//端口号
                //创建socket
                Socket socket = new Socket(ip,port);
                //发送消息
                OutputStream os = socket.getOutputStream();
        
                os.write("你好".getBytes());
        
                //关闭资源
                os.close();
                socket.close();
        
            }
        
        }
    

    服务端

        //服务端
        public class TCPDemo02 {
            public static void main(String[] args) throws Exception {
                //1.有一个端口号
                ServerSocket serverSocket = new ServerSocket(9999);
                //2.等待客户端连接
                Socket socket = serverSocket.accept();//客户端的socket
                //3.读取客户端消息
                InputStream is = socket.getInputStream();
        
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buf = new byte[1024];
                int len;
                while ((len=is.read(buf))!=-1){
                    baos.write(buf,0,len);
                }
                System.out.println(baos.toString());
        
                //关闭资源
                baos.close();
                is.close();
                socket.close();
                serverSocket.close();
        
            }
        }
    
    • 用TCP协议实现上传文件到服务端
      客户端
        public class client01 {
            public static void main(String[] args) throws Exception {
                //1.获取服务端ip和端口
                InetAddress ip = InetAddress.getByName("127.0.0.1");
                int port = 9999;
                //2.创建socket对象
                Socket socket = new Socket(ip,port);
                //3.获取输出流
                OutputStream os = socket.getOutputStream();
                //4.创建文件输入流
                FileInputStream fis = new FileInputStream("F:/桌面文件/a.txt");
                //5.写文件
                byte[] buf = new byte[1024];//缓冲区
                int len;
                while ((len=fis.read(buf))!=-1){
                    os.write(buf,0,len);
                }
                //通知传输结束
                socket.shutdownOutput();//输出完了
        
                //等服务端接收完
                InputStream is = socket.getInputStream();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buf2 = new byte[1024];
                int len2;
                while ((len2=is.read(buf2))!=-1){
                    baos.write(buf2,0,len2);
                }
                System.out.println(baos.toString());
                //6.关闭资源
                baos.close();
                is.close();
                fis.close();
                os.close();
                socket.close();
            }
        }
    

    服务端

       public class servlet01 {
           public static void main(String[] args) throws IOException {
               //1.创建服务端接口
               ServerSocket serverSocket = new ServerSocket(9999);
               //2.等待连接
               Socket socket = serverSocket.accept();
               //3.输入流
               InputStream is = socket.getInputStream();
               //4.创建文件输出流
               FileOutputStream fos = new FileOutputStream("receive.txt");
               //5.输出文件
               byte[] buf = new byte[1024];
               int len;
               while ((len=is.read(buf))!=-1){
                   fos.write(buf,0,len);
               }
               //通知客户端,接收完毕
               OutputStream os = socket.getOutputStream();
               os.write("接受完毕".getBytes());
               //6.关闭资源
               fos.close();
               is.close();
               socket.close();
               serverSocket.close();
       
           }
       
       }
    
  • 相关阅读:
    Linux 的伪终端的基本原理 及其在远程登录(SSH,telnet等)中的应用
    入住cnblogs第一篇随笔 Hello, world!
    清除maven加载失败的jar包记录
    解决Jackson2反序列化LocalDateTime报错
    springboot+dubbo基于zookeeper快速搭建一个demo
    解决bug:sprongboot2整合shiro,swagger2页面样式加载不出来问题
    Tomcat 8启动速度慢原因1: At least one JAR was scanned for TLDs yet contained no TLDs
    解决exlicpe以debug模式启动或运行速度非常慢的问题
    MAVEN打包报错:com.sun.net.ssl.internal.ssl;sun.misc.BASE64Decoder;程序包 javax.crypto不存在处理办法
    SQL根据B表内容修改A表内容,查询表中重复记录,删除掉重复项只保留一条
  • 原文地址:https://www.cnblogs.com/shimmernight/p/13441711.html
Copyright © 2011-2022 走看看