TCP传输

  Socket和ServerSocket

  建立客户端和服务器

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

  关闭socket

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

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

TCP传输-客户端思路

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

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

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

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

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

代码体现:

  1. /*
  2. TCP客户端:
  3. A:创建发送端的Socket对象,寻找到相对应的IP和端口以后,连接就建立成功
  4. Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
  5. B:创建输出流对象发送数据
  6. C:创建输入流对象接收数据
  7. D:释放资源
  8.  
  9. 连接被拒绝。TCP协议一定要先启动服务器端,再开客户端
  10. java.net.ConnectException: Connection refused: connect
  11. */
  12. public class ClientDemo {
  13. public static void main(String[] args) throws IOException, IOException {
  14.  
  15. //A:创建发送端的Socket对象
  16. //Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
  17. Socket s = new Socket("172.19.xx.xx",10010);
  18.  
  19. //B:创建输出流对象发送数据
  20. OutputStream os = s.getOutputStream();
  21. os.write("我来拉!!".getBytes());
  22.  
  23. //C:创建输入流对象接收数据
  24. InputStream is = s.getInputStream();
  25. byte[] bys = new byte[1024];
  26. int len = is.read(bys);//阻塞式
  27. String str = new String(bys,0,len);
  28. System.out.println(str);
  29.  
  30. //释放资源
  31. s.close();
  32.  
  33. }
  34. }

TCP传输—服务端思路

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

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

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

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

代码体现:

  1. /*
  2. TCP服务器端:
  3. A:创建服务端对象ServerSocket,监听窗口
  4. B:通过accept方法返回一个Socket对象
  5. // public Socket accept()
  6. C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
  7. D:创建输出流发送数据
  8. E:释放资源
  9. */
  10.  
  11. public class ServerDemo {
  12.  
  13. public static void main(String[] args) throws IOException {
  14.  
  15. // A:创建服务端对象ServerSocket,监听窗口
  16. ServerSocket ss = new ServerSocket(10010);
  17.  
  18. // B:通过accept方法返回一个Socket对象
  19. // public Socket accept()
  20. Socket s = ss.accept();//阻塞式,等待客户端的连接
  21.  
  22. // C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
  23. // public InputStream getInputStream() 返回此套接字的输入流
  24. InputStream is = s.getInputStream();
  25.  
  26. // 读取数据
  27. byte[] bys = new byte[1024];
  28. int len = is.read(bys);// 阻塞式,等待客户端传输数据
  29. // InputStrem : public int read()
  30. // 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。
  31. // 如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
  32. String str = new String(bys, 0, len);
  33.  
  34. // 获取客户端的名称
  35. // 获取客户端的地址对象,再获取名称
  36. String name = s.getInetAddress().getHostName();
  37.  
  38. //打印数据到控制台
  39. System.out.println("从"+name+"发送: "+str);
  40.  
  41. // D:创建输出流发送数据
  42. OutputStream os = s.getOutputStream();
  43. os.write("数据已收到".getBytes());
  44.  
  45. // E:释放资源
  46. s.close();// 释放客户端的资源
  47. // ss.close(); 这个不能释放,因为一释放,服务器就关闭了。
  48.  
  49. }
  50. }

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. 网络编程之TCP协议怎么使用?

    TCP 通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器会写的数据 表示客户端的类: java.net.Socket;此类实现客户端套接字.套接字是两台机器间通信的端点 套接字:包含了 ...

  8. 网络编程之tcp协议以及粘包问题

    网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...

  9. 网络编程之TCP协议与UDP协议

    了解网络就要了解一些基本的协议今天主要跟大家分享一些关于TCP 协议UDP协议的相关知识 首先介绍一下TCP协议 TCP(Transmission Cintrol Protocol)可靠的.面向连接的 ...

随机推荐

  1. SharePoint 2013 搭建负载均衡(NLB)

    服务器架构(三台虚机:AD和Sql在一台,前端两台) DC.Sql Server,其中包括:AD.DNS.DHCP服务(非必须): SPWeb01,其中包括:IIS.SharePoint: SPWeb ...

  2. 使用Reaver对WPS加密网络进行暴力破解

    WPS状态探测 探测开启了WPS功能的AP,WPS Locked状态为NO的表示开启了WPS功能. wash -i wlan0mon PIN码获取 reaver -i wlan0mon -b MAC地 ...

  3. 【思维导图】Fiddler学习笔记

    最近在学习Fiddler这款工具,边学边画了如下的思维导图,可以方便自己对这款工具有一个全面的了解. 软件介绍(摘自百度百科):Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电 ...

  4. 【Openlayers3】在地图上添加highcharts图表

    今天试用了一下ol3,效果很是不错! ol3中有个ol.Overlay,使用这个类我们可以在地图中添加各种html要素. 下面我们在地图中添加一个饼图 html中添加一个div容器: <div ...

  5. Android图表类库:WilliamChart

    WilliamChart是基于Views的Android图表类库,帮助开发者在Android应用中实现折线图.柱状图和堆叠柱状图.数值发生变化时图表也会以动画的效果发生变化. At the momen ...

  6. XMPP框架的分析、导入及问题解决

    上一篇讲了 XMPP调试与简单使用 ,本篇开始讲如何使用将XMPPFramework框架导入到项目中! 先来了解以下XMPPFramework都放了些什么: Authentication: 与登陆相关 ...

  7. 关于iOS和OS X废弃的API知识点

    今天在查看苹果接口文档时,突然对于接口的声明知识点比较感兴趣,再网络找到下面这个比较不错的文章,记录一下并分享: 如你所知,已废弃(Deprecated)的API指的是那些已经过时的并且在将来某个时间 ...

  8. windows svn 上传后 自动部署 到web目录下

    第一步 把web目录设置为工作目录 "D:\Program Files (x86)\VisualSVN Server\bin\svn.exe" upgrade "D:\y ...

  9. [转]从JVM角度看线程安全与垃圾收集

    线程安全 Java内存模型中,程序(进程)拥有一块内存空间,可以被所有的线程共享,即MainMemory(主内存):而每个线程又有一块独立的内存空间,即WorkingMemory(工作内存).普通情况 ...

  10. PHP操作mysql数据库:[2]查询数据听语音

    本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料   Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言   ...