这篇文章主要介绍了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();

}

}

java tcp demo_详解Java使用TCP实现数据传输实例相关推荐

  1. java lock unlock_详解Java中的ReentrantLock锁

    ReentrantLock锁 ReentrantLock是Java中常用的锁,属于乐观锁类型,多线程并发情况下.能保证共享数据安全性,线程间有序性 ReentrantLock通过原子操作和阻塞实现锁原 ...

  2. java system sleep_详解Java中的sleep()和wait()的区别

    详解Java中的sleep()和wait()的区别 对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序 ...

  3. java中priorityqueue_详解JAVA中priorityqueue的具体使用

    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...

  4. java web ip_详解Java Web如何限制访问的IP的两种方法

    前一阵子因为在做项目时碰到了这个功能,现在好好总结一下,至于为什么要限制IP访问,我就不多说了.然后百度了一下,现在主要有两种方式去限制IP访问,第一种是最简单的方便的,第二种是通过过滤器来限制访问. ...

  5. java中implement_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实 ...

  6. java中getclass_详解java中this.getClass()和super.getClass()的实例

    详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. ...

  7. java 重定向 redirect_详解Java从后台重定向(redirect)到另一个项目的方法

    (1)通过ModelAndView跳转 @RequestMapping("alipayforward") public ModelAndView alipayforward(Htt ...

  8. java ftp ftpclient_详解JAVA中使用FTPClient工具类上传下载

    详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClie ...

  9. java中断runnable_详解Java 线程中断

    一.前言 大家肯定都使用过 Java 线程开发(Thread / Runnable),启动一个线程的做法通常是: new Thread(new Runnable( @Override public v ...

最新文章

  1. 国开计算机组成原理,国开计算机组成原理.docx
  2. 开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...
  3. 1086 Tree Traversals Again (25 分)【一般 / 建树 树的遍历】
  4. java实现对英文字母去重_LeetCode算法题-Unique Morse Code Words(Java实现)
  5. C#调用python文件
  6. c语言修改windows系统时间,c语言实现系统时间校正工具代码分享
  7. 如何使用HTTP压缩优化服务器
  8. repeater的嵌套(转+总结)[http://www.cnblogs.com/esshs/archive/2005/04/07/132825.html]
  9. LeetCode 945. 使数组唯一的最小增量
  10. 对TCP/IP协议的一些看法(13):IP路由
  11. 下载地图制作成GST格式(谷歌、百度、高德)导入到Mapinfo中使用
  12. linux嵌入式学习
  13. 数学分析(卓里奇)学习笔记001
  14. ma系列之-17-磁盘和文件系统1
  15. 【权限设计】权限系统的设计——由浅至深
  16. STM32F429第二篇之推挽输出与开漏输出
  17. 【物联网】阿里云iot物联网平台监控设备 在线离线状态 解决方案
  18. 【Python】将xls格式转换为xlsx格式
  19. 360修复服务器漏洞,360安全漏洞不需要修复怎么设置
  20. DFS回溯-函数递归-xiaoz triangles

热门文章

  1. 自由软件不够吸引人?
  2. 当 Windows 11 宕机时:从蓝屏死机变成“黑屏死机”!
  3. 面试时遇到一致性哈希算法这样回答会让面试官眼前一亮
  4. 提出智能扰动方法!字节跳动隐私保护论文入选 NeurIPS 2020 联邦学习Workshop
  5. 国内数据中心变革的见证者,揭秘阿里巴巴数据中心技术积淀
  6. 直接保存 DataFrame 表格到本地,这个“骚操作”你还不知道?
  7. 这道考 switch 控制语句的阿里基础面试题你能答对吗?
  8. 爱奇艺网络协程编写高并发应用实践
  9. 20 位行业专家共话选型经验,CSDN「选型智囊团高端研讨会」圆满落幕!
  10. 面试官:你说对 MySQL 事务很熟?那我问你 10 个问题