/*
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);
}
}
分享到:
相关推荐
Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...
Java学习笔记:JSONObject与JSONArray的使用.docx
Java学习笔记:JSONObject与JSONArray的使用.pdf
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 学习笔记》、《Spring 技术手册》,为SUN官方教材主要编写成员之一 博客: http://blog.csdn.net/caterpillar_here 详细信息: http://www.china-pub.com/computers/common/info.asp?id=31664
Java学习笔记1 Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。...
5. IO流:Java的IO流系统支持对文件、网络、内存等进行输入输出操作。流分为字节流和字符流,又分为输入流和输出流。还有缓冲流、对象流、转换流等高级流概念。 6. 网络编程:Java提供Socket和ServerSocket类进行...
《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...
java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...
Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
"Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...
Java JDK 5.0学习笔记:TP312JA L393.iso 随书光盘,欢迎大家下载 大家共享^A^
java笔记:01.IDEA常用配置总结.md Java是一种高级的面向对象的程序设计语言,它具有广泛的应用和强大的跨平台特性。Java语言于1995年由Sun公司推出,由Java之父詹姆斯高斯林设计。Java的设计目标是提供一种易学易用...
3. 输入/输出(IO)流:Java的15IO流.md文件深入解析了IO流的使用,包括文件流、字符流、字节流以及缓冲流的处理。IO流是数据传输的桥梁,允许程序与外部设备进行数据交换。 4. 多线程:在10多线程.md中,介绍了...
6. **输入/输出流**:Java提供了强大的I/O流系统,支持文件读写、网络通信和数据序列化等操作,如FileInputStream和FileOutputStream用于文件操作,Socket和ServerSocket用于网络编程。 7. **多线程**:Java内置了...
#### 标题:Java学习笔记及心得 #### 描述:Core Java 学习笔记及心得 pdf格式可打开。涵盖了java的基础入门知识,非常适合自学的及想深入学习理解的同学。 #### 标签:Java、基础入门、学习笔记 #### 知识点详细...
7. **网络编程**:Java的Socket编程允许开发网络应用程序,包括TCP和UDP通信。笔记将涵盖服务器和客户端的实现,以及如何处理网络数据。 8. **反射机制**:Java反射API允许在运行时动态访问类的信息,包括类名、...
5. **应用服务器(App Server)**:Java应用服务器为Java企业组件提供运行环境。主流的应用服务器包括BEA的WebLogic Server、IBM的WebSphere以及开源的JBoss。它们提供了诸如Servlet、JSP、JNDI、数据库连接池、事务...