标签:style blog http io os 使用 java ar strong
作者 : 卿笃军
原文地址: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
标签:style blog http io os 使用 java ar strong
原文地址:http://blog.csdn.net/qingdujun/article/details/39324737