TCP传输

  Socket和ServerSocket

  建立客户端和服务器

  建立连接后,通过Socket中的IO流进行数据的传输

  关闭socket

  同样,客户端与服务器是两个独立的应用程序

TCP协议发送和接收数据的思路图解:

TCP传输-客户端思路

  1:建立客户端的Socket服务,并明确要连接的服务器。

  2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.

  3:通过Socket对象的方法,可以获取这两个流

  4:通过流的对象可以对数据进行传输

  5:如果传输数据完毕,关闭资源

代码体现:

 /*
      TCP客户端:
          A:创建发送端的Socket对象,寻找到相对应的IP和端口以后,连接就建立成功
              Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
          B:创建输出流对象发送数据
          C:创建输入流对象接收数据
          D:释放资源

     连接被拒绝。TCP协议一定要先启动服务器端,再开客户端
       java.net.ConnectException: Connection refused: connect
  */
 public class ClientDemo {
     public static void main(String[] args) throws IOException, IOException {

         //A:创建发送端的Socket对象
         //Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
         Socket s = new Socket("172.19.xx.xx",10010);

         //B:创建输出流对象发送数据
         OutputStream os = s.getOutputStream();
         os.write("我来拉!!".getBytes());

         //C:创建输入流对象接收数据
         InputStream is = s.getInputStream();
         byte[] bys = new byte[1024];
         int len = is.read(bys);//阻塞式
         String str = new String(bys,0,len);
         System.out.println(str);

         //释放资源
         s.close();

     }
 }

TCP传输—服务端思路

  1:建立服务器端的socket服务,需要一个端口

  2:服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信

  3:通过客户端的获取流对象的方法,读取数据或者写入数据

  4:如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的

代码体现:

 /*
      TCP服务器端:
          A:创建服务端对象ServerSocket,监听窗口
          B:通过accept方法返回一个Socket对象
          // public Socket accept()
          C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
          D:创建输出流发送数据
          E:释放资源
  */

 public class ServerDemo {

     public static void main(String[] args) throws IOException {

         // A:创建服务端对象ServerSocket,监听窗口
         ServerSocket ss = new ServerSocket(10010);

         // B:通过accept方法返回一个Socket对象
         // public Socket accept()
         Socket s = ss.accept();//阻塞式,等待客户端的连接

         // C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
         // public InputStream getInputStream() 返回此套接字的输入流
         InputStream is = s.getInputStream();

         // 读取数据
         byte[] bys = new byte[1024];
         int len = is.read(bys);// 阻塞式,等待客户端传输数据
         // InputStrem : public int read()
         // 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。
         // 如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
         String str = new String(bys, 0, len);

         // 获取客户端的名称
         // 获取客户端的地址对象,再获取名称
         String name = s.getInetAddress().getHostName();

         //打印数据到控制台
         System.out.println("从"+name+"发送: "+str);

         // D:创建输出流发送数据
         OutputStream os = s.getOutputStream();
         os.write("数据已收到".getBytes());

         // E:释放资源
         s.close();// 释放客户端的资源
         // ss.close(); 这个不能释放,因为一释放,服务器就关闭了。

     }
 }

java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码的更多相关文章

  1. java 26 - 7 网络编程之 TCP协议代码优化

    上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流. 优化: A:这次,为了高效,对这个字节流通过转换流来进行包装,包装成高效字符流. B:这次,传输的数据是通过键盘录入的数据. 服务器 ...

  2. java 25 - 4 网络编程之 UDP协议传输思路

    UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...

  3. java 26 - 9 网络编程之 TCP协议多用户上传文件

    TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现. 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权: 首先,创建个线程类:(这 ...

  4. java 26 - 8 网络编程之 TCP协议的练习

    TCP练习: 1.客户端键盘录入,服务器输出文本文件 客户端代码: public class ClientDemo { public static void main(String[] args) t ...

  5. java 26 - 8 网络编程之 TCP协议上传图片

    上次的是上传TXT文件,这次上传的是图片.同样,上传成功需要反馈给客户端. 区别: TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了. 而图片用记事本打开,我们看 ...

  6. java 25 - 4 网络编程之 UDP协议传输的代码优化

    UDP协议的输出端: /* UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) */ public c ...

  7. python六十九课——网络编程之TCP协议

    1.1 概述: TCP协议通过三次握手协议将客户端与服务器端连接,两端使用各自的Socket对象.Socket对象中包含了IO流,供数据传输. 即:TCP协议在客户端与服务器端通过Socket组成了I ...

  8. java网络编程之TCP通讯

    java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...

  9. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载.   ...

随机推荐

  1. javaEE基础

    1.拦截器与过滤器 过滤器(filter),过滤器处于客户端与Web资源(Servlet.JSP.HTML)之间,客户端与Web资源之间的请求和响应都要通过过滤器进行过滤.如过滤编码,IP 拦截器(i ...

  2. PC网站应用接入微信登录

    参考文档: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&ve ...

  3. Java Serializable

    实现Serializable的class表明object可以被保存. 被保存的时候实际是存储class里的instance variable,这样在deserialization的时候可以恢复obje ...

  4. jsb游戏闪退 ScriptingScore::executeFunctionWithOwner 出错

    Assertion failure: thing, at...gc/Marking.cpp:112 遇到个jsb的bug,全公司的人整整折腾了2天!! 描述: 下面代码,在GC后,程序崩溃,错误log ...

  5. Storm集群扩容——从单机模式拓展到集群模式,以此类推

    Storm是分布式的实时流处理系统,单机模式肯本不能体现其强大特点,尤其是当需要处理的数据很大很快的 时候,Storm可以随时扩容,而且操作非常简单,编写的应用程序自动负载均衡. 前面已经介绍了如何安 ...

  6. Computer Science 学习第四章--CPU 指令集和指令处理

    Instruction set Y86 指令集 运算符:addl, subl, andl, and xorl 跳转符:jmp,jle,jl,je,jne,jge, andjg 条件符:cmovle, ...

  7. SQL一次查出相关类容避免长时间占用表(下)

    /* server: db: EDI */ -- 以下案例多次查询同一张表,仅有Name条件不同 --可以使用一次查出相关类容避免长时间占用表 USE EDI GO DECLARE @FileType ...

  8. [面试]Actor模型

    Actor模型 面试中自己说话不利落, 或者自己对知识点认识不全面.在这里进行一下记录. 理论部分都是收集(copy)自网上其他的博客. 什么是Actor模型 参与者模式(英语:Actor model ...

  9. /bin, /sbin & /usr/bin, /usr/sbin & /usr/local/bin, /usr/local/sbin & glibc

    操作系统为自身完成启动所需要的 /bin, /sbin 系统基本管理所需要的 /usr/bin, /usr/sbin 第三方的 /usr/local/bin, /usr/local/sbin 核心库 ...

  10. springcloud+zuul+swagger 分布式接口文档

    https://gitee.com/didispace/swagger-butler 1.引用上面项目中的swagger 工具包 2.zuul 网关配置 zuul.routes.api-apiserv ...