`

java学习笔记:TCP通讯应用,传送文本文件

    博客分类:
  • java
TCP 
阅读更多

 

/*
TCP通讯

[示例]:传送文本文件 (客户端)
*/

import java.net.*;
import java.io.*;
class Demo
{
  public static void main(String[] args) throws Exception
  {
    new FileClient();
  }
}

class FileClient  //客户端
{
  FileClient() throws Exception
  {
    s.op("客户端启动....");
    client();
  }
  
  public void client()throws Exception
  {
    Socket sock = new Socket("192.168.1.3",10006);//指定服务器地址和接收端口
    
    //将c盘一个文本文件发送到服务器端
    BufferedReader bufr = new BufferedReader(new FileReader("c:\\abcd.java"));
    
    //定义socket输出流,将数据发给服务端
    //BufferedWriter bufwOut=new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
    //我们不用它了,用PrintWriter更方便,因为println方法自动换行和刷新缓冲区9
    PrintWriter priOut= new PrintWriter(sock.getOutputStream(),true);//将数据发送到socket输出流
    
    String fileLine = null;
    while(true)
    {
      fileLine = bufr.readLine(); //读文本文件
      if(fileLine!=null)
      {
        priOut.println(fileLine); //将一行文本写入socket输出流      
      }
      else
      {
        break;
      }    
    }
    //文件传送完后,告诉服务端,"我发完了",也就是加一个结束标记
    //priOut.println("*#over886*#");  这种方式不好,服务端怎么知道结束标记是什么,不方便
    
    sock.shutdownOutput(); //结束TCP套接字,之前写入的数据都将被发送,并且后跟TCP连接终止标记
    BufferedReader bufrIn=new BufferedReader(new InputStreamReader(sock.getInputStream()));    
    String inStr = bufrIn.readLine(); //服务端此时应该返回字符,比如"发送成功"
    s.op(inStr);   //显示服务器返回的字符信息 "上传成功."
    bufr.close();
    sock.close();
  }
}

class s  
{
  public static void op(Object obj) //打印
  {
    System.out.println(obj);
  }
}

 

/*
这里我们没有考虑客户端的文件名,和客户端判断是否有重名文件,我们指定了文件名和路径

[示例]:传送文本文件 (服务端)
*/
import java.net.*;
import java.io.*;
class Demo
{
  public static void main(String[] args) throws Exception
  {
    new FileServer();
  }
}

class FileServer  //服务端
{
  FileServer() throws Exception
  { 
    s.op("服务端启动......");
    server();
  }

  public void server() throws Exception
  {
    ServerSocket serversock = new ServerSocket(10006);
    Socket sock = serversock.accept();
    
    String ip = sock.getInetAddress().getHostAddress();
    s.op("来自客户端IP "+ip+" 的文件");
    
    BufferedReader bufrIn = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    PrintWriter priFileOut = new PrintWriter(new FileWriter("d:\\getFile.java"),true);
    String inStr = null;
    while(true)
    {
      inStr = bufrIn.readLine();
      if(inStr!=null)
      {
        s.op(inStr); //将客户端的文本数据打印到控制台看看,对于大文件,本行代码可注释掉
        priFileOut.println(inStr); //写到文件中          
      }
      else
      {
        break;
      }
    }  
    //文件保存完给客户端一个返回信息
    PrintWriter priOut = new PrintWriter(sock.getOutputStream(),true); //注意别丢了参数true
    priOut.println("上传成功.");//如果没有true参数,字符在缓冲区中不刷新的
    sock.close();
    priFileOut.close();
    serversock.close();
  }
}

class s
{
  public static void op(Object obj) //打印
  {
    System.out.println(obj);
  }
}
 
5
2
分享到:
评论

相关推荐

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    林信良JAVA学习笔记

    著作:《JAVA 学习笔记》、《Spring 技术手册》,为SUN官方教材主要编写成员之一 博客: http://blog.csdn.net/caterpillar_here 详细信息: http://www.china-pub.com/computers/common/info.asp?id=31664

    java学习笔记1

    Java学习笔记1 Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。...

    Java 学习笔记Java学习笔记

    5. IO流:Java的IO流系统支持对文件、网络、内存等进行输入输出操作。流分为字节流和字符流,又分为输入流和输出流。还有缓冲流、对象流、转换流等高级流概念。 6. 网络编程:Java提供Socket和ServerSocket类进行...

    JAVA学习笔记 林信良

    《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...

    java学习笔记.zip

    java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...

    Java 虚拟机学习笔记:Java 内存区域,垃圾收集,内存分配与回收策略,JVM 调优,文件结构,类加载机制,Java 程序

    Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    Java JDK 5.0学习笔记:TP312JA L393.iso

    Java JDK 5.0学习笔记:TP312JA L393.iso 随书光盘,欢迎大家下载 大家共享^A^

    Java基础 学习笔记 Markdownr版

    3. 输入/输出(IO)流:Java的15IO流.md文件深入解析了IO流的使用,包括文件流、字符流、字节流以及缓冲流的处理。IO流是数据传输的桥梁,允许程序与外部设备进行数据交换。 4. 多线程:在10多线程.md中,介绍了...

    Java学习笔记(必看经典).doc

    6. **输入/输出流**:Java提供了强大的I/O流系统,支持文件读写、网络通信和数据序列化等操作,如FileInputStream和FileOutputStream用于文件操作,Socket和ServerSocket用于网络编程。 7. **多线程**:Java内置了...

    Java学习笔记及心得

    #### 标题:Java学习笔记及心得 #### 描述:Core Java 学习笔记及心得 pdf格式可打开。涵盖了java的基础入门知识,非常适合自学的及想深入学习理解的同学。 #### 标签:Java、基础入门、学习笔记 #### 知识点详细...

    Java学习笔记(源码)

    7. **网络编程**:Java的Socket编程允许开发网络应用程序,包括TCP和UDP通信。笔记将涵盖服务器和客户端的实现,以及如何处理网络数据。 8. **反射机制**:Java反射API允许在运行时动态访问类的信息,包括类名、...

    读书笔记:零基础轻松学 Java 学习笔记.zip

    读书笔记:零基础轻松学 Java 学习笔记

    配套学习资料:Java开发 - 尚硅谷JavaWeb学习笔记

    Java开发 - 尚硅谷JavaWeb学习笔记 - Part1: https://blog.csdn.net/qq_63317769/article/details/139883728 Java开发 - 尚硅谷JavaWeb学习笔记 - Part2: Java开发 - 尚硅谷JavaWeb学习笔记 - Part3: Java开发 ...

    java学习笔记.doc

    Java 学习笔记 本资源摘要信息涵盖了 Java 编程语言的基础知识,着重于面向对象编程(OOP)的概念和实现。下面是该资源的详细知识点: 1. 面向对象编程(OOP)的基本概念: * 对象: everything is an object...

Global site tag (gtag.js) - Google Analytics