Java使用TCP实现数据传输实例详解
时间:2019-03-30
本文章向大家介绍Java使用TCP实现数据传输实例详解,主要包括Java使用TCP实现数据传输实例详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Java使用TCP实现数据传输实例详解
TCP所提供服务的主要特点:
1.面向连接的传输;
2.端到端的通信;
3.高可靠性,确保传输数据的正确性,不出现丢失或乱序;
4.全双工方式传输;
5.采用字节流方式,即以字节为单位传输字节序列;
6.紧急数据传送功能。
TCP传输需要建立客户端和服务器端,即Socket和Server Socket , 建立连接后,通过Socket中的IO流进行数据的传输 。传输结束后关闭Socket。
客户端和服务器端是两个独立的应用程序。
以下是实现基本的TCP数据传输的Demo code:
package javase.day18; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class TransTextDemo { public static void main(String[] args) { } } class TcpClient2{ public static void main(String[] args) throws Exception{ System.out.println("client start..."); Socket s = new Socket("192.168.1.2",10005); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String sendDataStr=null; while((sendDataStr=br.readLine())!=null){ if(sendDataStr.equals("bye")){ break; } bw.write(sendDataStr); bw.newLine(); bw.flush(); } bw.close(); } } class TcpServer2{ public static void main(String[] args) throws Exception{ System.out.println("server start..."); ServerSocket ss = new ServerSocket(10005); Socket s = ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String receiveDataStr=null; while((receiveDataStr=br.readLine())!=null){ if(receiveDataStr.equals("bye")){ break; } System.out.println("receive data:"+receiveDataStr); } } }
使用TCP实现文本文件上传的Demo code:
package javase.day18; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class UploadText { public static void main(String[] args) { // TODO Auto-generated method stub } } class TextServer{ public static void main(String[] args) throws Exception{ System.out.println("Server start..."); ServerSocket ss = new ServerSocket(10008); Socket s = ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter out = new PrintWriter(new FileWriter("C:\\java_test\\server.txt"),true); String line=null; while((line=br.readLine())!=null){ System.out.println(line); out.println(line); } PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true); pw.println("upload successful"); pw.close(); s.close(); ss.close(); } } class TextClient{ public static void main(String[] args) throws Exception{ System.out.println("Client start..."); Socket clientSocket = new Socket("192.168.1.2",10008); BufferedReader br = new BufferedReader(new FileReader("C:\\java_test\\SystemDemo.java")); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true); String line=null; while((line=br.readLine())!=null){ System.out.println(line); out.println(line); } clientSocket.shutdownOutput(); BufferedReader br2 = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String confirmMsgStr=br2.readLine(); System.out.println(confirmMsgStr); br2.close(); clientSocket.close(); } }
实现图片上传的Demo code:
package javase.day18; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.ServerSocket; import java.net.Socket; public class UploadImage { public static void main(String[] args) { } } class ImageClient{ public static void main(String[] args) throws Exception{ Socket imageClientSocket = new Socket("192.168.1.2",10010); BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\java_test\\client\\生活用品01.jpg")); BufferedOutputStream bos = new BufferedOutputStream(imageClientSocket.getOutputStream()); byte[] buf = new byte[1024*100]; int len = 0 ; while((len=bis.read(buf))!=-1){ bos.write(buf,0,len); } imageClientSocket.shutdownOutput(); BufferedInputStream bis2 = new BufferedInputStream(imageClientSocket.getInputStream()); byte[] buf2 = new byte[1024]; int len2 = 0 ; while((len2=bis2.read(buf2))!=-1){ System.out.println(new String(buf2,0,len2)); } bis.close(); imageClientSocket.close(); } } class ImageServer{ public static void main(String[] args) throws Exception{ ServerSocket ss = new ServerSocket(10010); Socket s = ss.accept(); BufferedInputStream bis = new BufferedInputStream(s.getInputStream()); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\java_test\\server\\生活用品01.jpg")); byte[] buf = new byte[1024*100]; int len = 0 ; while((len=bis.read(buf))!=-1){ bos.write(buf, 0, len); } BufferedOutputStream bos2 = new BufferedOutputStream(s.getOutputStream()); bos2.write("upload successful".getBytes()); bos2.close(); s.close(); ss.close(); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
- python报错问题解决:'ascii' codec can't encode character
- 利用message queue实现aspx与winform通信, 并附完整示例
- 10招步骤保护IIS服务器安全
- Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
- Android-Universal-Image-Loader 图片异步加载类库的使用
- 工作组模式下专用队列(Private Queue)如何引用远程队列路径
- haproxy反向代理环境部署(http和https代理)
- 网站速度优化模块HttpCompressionModule
- mysql启动后随即关闭问题解决(ibdata1文件损坏导致)
- webvirtmgr-重命名kvm虚拟机的名称
- Lucene 2.0最基本的入门代码
- 网站每日PV/IP统计/总带宽/URL统计脚本分享(依据网站访问日志)
- 查看服务器系统资源(cpu,内容)利用率前几位的进程的方法
- 腾讯云平台部总经理陈磊:大数据背后的技术支撑
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- flink实战-flink streaming sql 初体验
- flink实战教程-使用set实时计算当天网站uv
- 贪心-HDU3348 coins(钱币问题)
- 归并排序详解 -HDU4911 Inversion(逆序对)
- 数据结构与算法——稀疏数组
- Maven安装配置详细教程
- 数据结构与算法——冒泡排序
- MyBatis Generator逆向工程-你还在手写mapper吗?
- JSR303后端校验详解
- SSM整合开发实战 SSM-MALL
- SQL Server获取元数据所有方法和示例
- 数据结构与算法——选择排序
- SmtpJS发送邮件教程
- 数据结构与算法——队列
- 前后端数据交互-json 你还不会传集合吗?