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();
  }
}

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

(0)

相关推荐

  • Java实现Socket的TCP传输实例

    本文实例讲述了Java实现Socket的TCP传输.分享给大家供大家参考.具体分析如下: 客户端发数据到服务端 * Tcp传输,客户端建立的过程. * 1,创建tcp客户端socket服务.使用的是Socket对象. * 建议该对象一创建就明确目的地.要连接的主机. * 2,如果连接建立成功,说明数据传输通道已建立. * 该通道就是socket流 ,是底层建立好的. 既然是流,说明这里既有输入,又有输出. * 想要输入或者输出流对象,可以找Socket来获取. * 可以通过getOutputSt

  • 基于java TCP网络通信的实例详解

    JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数据丢失的现象,有一方中断,两方的通信就会结束,UDP数据包传送的过程当中,一方中断,数据包有很大的可能丢失,还有可能传来的数据包的顺序是错乱的:在效率方面,UDP要比TCP快的不只是一点点的问题,若终端有解析数据方法的函数,数据包就会源源不断的传送过来,然后反馈回去.以上都是我自己的理解,下面是关于

  • Java基于TCP方式的二进制文件传输

    一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1.基于Java Socket的二进制文件传输(包括图片,二进制文件,各种文档work,PDF) 2.SwingWorker集合JProgressBar显示实时传输/接受完成的百分比 3.其它一些Swing多线程编程技巧 首先来看一下整个Dome的Class之间的关系图: 下面按照上图来详细解释各个类的

  • java 中模拟TCP传输的客户端和服务端实例详解

    一.创建TCP传输的客户端 1.建立TCP客户端的Socket服务,使用的是Socket对象,建议该对象一创建就明确目的地,即要连接的主机: 2.如果连接建立成功,说明数据传输通道已建立,该通道就是Socket流,是底层建立好的,既然是流,说着这里既有输入流,又有输出流,想要输入流或者输出流对象,可以通过Socket来获取,可以通过getOutputStream()和getInputStream()来获取: 3.使用输出流,将数据写出: 4.关闭Socket服务. import java.io.

  • java中TCP/UDP详细总结

    TCP/UDP:TCP主要是面向连接的协议,它包含有建立和拆除连接,保证数据流的顺序和正确性等功能. 每次对TCP中间的数据操作相当于对一个数据流进行访问.它最典型的特征就是那三次握手的建立连接过程.Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求.典型的处理步骤如下: 1. 构建一个ServerSocket实例,指定本地的端口.这个socket就是用来监听指定端口的连接请求的. 2.重复如下几个步骤: a. 调用socket的accept()方法来获得下面客户端的连

  • Java通过 Socket 实现 TCP服务端

    1 Java Socket简介 所谓socket 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.Socket和ServerSocket类库位于Java.NET包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或

  • Java基于Tcp协议的socket编程实例

    本文实例讲述了Java基于Tcp协议的socket编程方法,分享给大家供大家参考.具体分析如下: 以下是一对一的通信编程实现,后续会继续学习一个服务器监听多个客户端的实现. 这里用到的主要步骤如下: 第一步:以特定端口(如4800)新建socket对象 第二步:以系统输入设备构造BufferedReader对象,该对象用于接收系统键盘输入的字符 第三步:以socket对象 得到输出流来构造PrintWriter 第四步:以socket对象得到输入流来构造相应的BufferedReader对象,该

  • JAVA编程实现TCP网络通讯的方法示例

    本文实例讲述了JAVA编程实现TCP网络通讯的方法.分享给大家供大家参考,具体如下: TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 由IETF的RFC 793定义,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能. 基于TCP网络通讯实现的类主要有服务器端的ServerSocket用客户端的Socket. 通讯流程: 打开服务器,等待客户端连接-->客户端连接上服务器-->数据通讯. 代码

  • java实现一个简单TCPSocket聊天室功能分享

    本文实例为大家分享了java实现TCPSocket聊天室功能的相关代码,供大家参考,具体内容如下 1.TCPserver.java import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; public class TCPserver{ private static final int SERVERPORT = 8888; private ServerSocket MyServe

  • java 基础知识之网络通信(TCP通信、UDP通信、多播以及NIO)总结

    java 基础知识之网路通信总结 在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信.UDP通信.多播以及NIO. TCP连接 TCP的基础是Socket,在TCP连接中,我们会使用ServerSocket和Socket,当客户端和服务器建立连接以后,剩下的基本就是对I/O的控制了. 我们先来看一个简单的TCP通信,它分为客户端和服务器端. 客户端代码如下: 简单的TCP客户端 import java.net.*; import java.io.*; public class

  • 实现了基于TCP的Java Socket编程实例代码

    实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello",客户端接收并输出. 1.服务器端 复制代码 代码如下: package javase.net.socket; import java.io.DataInputStream;  import java.io.DataOutputStream;  import java.io.IOException;  im

  • JAVA实现基于Tcp协议的简单Socket通信实例

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西.  1.首先先来看下基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤:(简单分为4步) 1.建立服务端ServerSocket和客户端Socket 2.打开连接到Socket的输出输入流 3.按照协议进行读写操作 4.关闭相对应的资源 2.相关联的API: 1.首先先来看下

随机推荐