Java TCP使用Socket进行网络文件传送(5)

作者 : 卿笃军

原文地址:http://blog.csdn.net/qingdujun/article/details/39324737


本文演示,TCP使用Socket进行网络文件传送,实现将客户端的文件upload.txt上传到服务器。

1)客户端,上传文件upload.txt,并接受服务器反馈上传成功与否消息。

2)服务器,接受客户端文件,将接收到的文件命名为Rece.txt,同时给客户端发送消息“上传成功”。


客户端,代码如下:

package upload.file.client;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

//客户端:上传文件
public class CUploadFileClient {

	public static void main(String[] args) throws Exception {
		Socket s = new Socket("127.0.0.1",8686);
		BufferedReader bufr = new BufferedReader(new FileReader("upload.txt"));
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		String line = null;
		//狂读数据
		while ((line = bufr.readLine()) != null)
		{
			//读一行,发送一行
			out.println(line);
		}
		//关闭客户端输出流,相当于给流中加结束标记
		s.shutdownOutput();
		//接受服务端消息
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String str = bufIn.readLine();
		//打印服务器发送过来的消息
		System.out.println(str);
		//关闭资源
		bufr.close();
		bufIn.close();
		s.close();
	}
}
服务端,代码如下:

package upload.file.server;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

//服务端:接受文件
public class CUploadFileServer {

	public static void main(String[] args) throws Exception{
		//监听8686端口
		ServerSocket ss = new ServerSocket(8686);
		System.out.println("服务器已启动,正在监听8686端口...");
		//进入消息等待接受中...
		Socket s = ss.accept();
		//显示客户端ip地址
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+"已连接");
		//这里是getInputStream流
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//这里是FileWriter
		PrintWriter out = new PrintWriter(new FileWriter("Rece.txt"),true);
		String line = null;
		//狂读数据,往文件里写一行
		while ((line = bufIn.readLine()) != null)
		{
			out.println(line);
		}
		//获得输出流,给客户端发送一条消息
		PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
		pw.println("上传成功");
		//关闭资源
		bufIn.close();
		out.close();
		pw.close();
		s.close();ss.close();
	}
}
这里需要注意几点:

1)BufferedReader 是将数据读取到缓冲流,如果不用println(),则需要刷新缓冲流flush()。

2)readLine()读取是以换行结束,这时候如果不对结束加以处理,则很容易造成服务器客户端都进入阻塞状态。


运行效果显示:

1)启动服务端


2)启动客户端,上传文件


3)服务端和客户端链接成功



另外,需要上传文件和接收到的文件位置显示如下:

1)上传前


2)上传成功



参考文献: Java视频 毕向东 主讲

原文地址:http://blog.csdn.net/qingdujun/article/details/39324737


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。