服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|

服务器之家 - 编程语言 - JAVA教程 - Java使用TCP实现数据传输实例详解

Java使用TCP实现数据传输实例详解

2020-11-11 16:50Alex_zhuang JAVA教程

这篇文章主要介绍了Java使用TCP实现数据传输实例详解的相关资料,需要的朋友可以参考下

Java使用TCP实现数据传输实例详解

TCP所提供服务的主要特点:

  1.面向连接的传输;
  2.端到端的通信;
  3.高可靠性,确保传输数据的正确性,不出现丢失或乱序;
  4.全双工方式传输;
  5.采用字节流方式,即以字节为单位传输字节序列;
  6.紧急数据传送功能。

TCP传输需要建立客户端和服务器端,即Socket和Server Socket , 建立连接后,通过Socket中的IO流进行数据的传输 。传输结束后关闭Socket。

客户端和服务器端是两个独立的应用程序。

以下是实现基本的TCP数据传输的Demo code:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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();
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/alex_zhuang/article/details/6945650

延伸 · 阅读

精彩推荐
  • JAVA教程Java中Arrays的介绍及使用方法示例

    Java中Arrays的介绍及使用方法示例

    这篇文章主要给大家介绍了关于Java中Arrays及使用方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    山有caspar4262020-09-02
  • JAVA教程Trie树(字典树)的介绍及Java实现

    Trie树(字典树)的介绍及Java实现

    Trie树,又称字典树或前缀树,关于它的结构就不详细介绍了。Trie树在单词统计、前缀匹配等很多方面有很大用处。下面这篇文章主要介绍了Trie树,以及...

    小楼一夜听春雨5092020-08-02
  • JAVA教程java dom4j解析xml用到的几个方法

    java dom4j解析xml用到的几个方法

    这篇文章主要介绍了java dom4j解析xml用到的几个方法,有需要的朋友可以参考一下 ...

    java开发网2142019-10-25
  • JAVA教程全面解析Spring Security 过滤器链的机制和特性

    全面解析Spring Security 过滤器链的机制和特性

    这篇文章主要介绍了Spring Security 过滤器链的机制和特性,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    码农小胖哥2222020-07-07
  • JAVA教程Java中接收键盘输入的三种方法

    Java中接收键盘输入的三种方法

    这篇文章主要介绍了Java中接收键盘输入的三种方法,本文给出3个方法实现通过读取控制台的输入与用户实现交互,需要的朋友可以参考下 ...

    junjie3252019-12-21
  • JAVA教程基于java中的PO VO DAO BO POJO(详解)

    基于java中的PO VO DAO BO POJO(详解)

    下面小编就为大家带来一篇基于java中的PO VO DAO BO POJO(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Java之家3922020-11-03
  • JAVA教程详解在Spring Boot中使用JPA

    详解在Spring Boot中使用JPA

    本篇文章主要介绍了详解在Spring Boot中使用JPA,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    _江南一点雨2072020-10-07
  • JAVA教程java连接数据库(代码分享)

    java连接数据库(代码分享)

    本文主要介绍了java连接数据库的实现方法代码。具有很好的参考价值。下面跟着小编一起来看下吧...

    LiangYun-Yin3042020-09-01