您的位置:首页 > 理论基础 > 计算机网络

26-网络编程-16-网络编程(TCP协议-练习-上传文本文件)

2015-08-11 17:27 218 查看
/*
* 【练习】从客户端向服务端上传文本文件
*/

package UploadText;

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

public class UploadClient {

public static void main(String[] args) throws UnknownHostException, IOException {

//1.建立客户端Socket对象
Socket s = new Socket("10.196.19.56",10006);

//2.建立读取流,用于读取待上传的文本文件内容
BufferedReader bufr = new BufferedReader(new FileReader("client.txt"));

//3.建立输出流,利用Socket特有方法获取输出流,将文件中数据输出到服务端
PrintWriter out = new PrintWriter(s.getOutputStream(),true);

String line = null;
while((line=bufr.readLine())!=null){

out.println(line);
/*
* 【如果没有结束标记】
* 这里客户端发送一行数据给服务端(下接UploadServer中while循环)
*
* 直到客户端数据全部发送完毕(下接UploadServer中while循环)
*/

}

/*
* 【特别注意】到这里位置客户端数据发送完毕,告诉服务端,即定义结束标记,用Socket类的特有方法:
* 			public void shutdownOutput()throws IOException
* 用于定义结束标记告诉服务端这边客户端结束
*/
s.shutdownOutput();

//4.获取服务端反馈信息,即提示上传成功
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

String str = bufIn.readLine();//不用循环读了,一个提示信息而已,读一行即可

System.out.println(str);

//5.关闭资源
bufr.close();
s.close();

}

}

=========================分割线=============================

package UploadText;

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

public class UploadServer {

public static void main(String[] args) throws IOException {

//1.建立服务端ServerSocket对象
ServerSocket ss = new ServerSocket(10006);

//2.通过ServerSocket类特有方法accept()获取客户端的Socket对象
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+"connected......");

//3.读取客户端发来的数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
//由于客户端发来的是用字节流读取的文本数据,那么这里用转换流InputStreamReader将字节数据转为字符数据

//4.将上一步读取到的数据写到服务端文本文件中
BufferedWriter bufw = new BufferedWriter(new FileWriter("server.txt"));

String line = null;

while((line=bufIn.readLine())!=null){//先读取客户端的数据

bufw.write(line);//再写到服务端文件中
bufw.newLine();//每写一行数据,换行一次
/*
* 【如果没有结束标记】
* (上接UploadClient中while循环)这里接收一行数据
*
* (上接UploadClient中while循环)这里服务端还在等客户端数据,不知道客户端已经发完,所以readLine()阻塞,程序卡住不动
*/
bufw.flush();
//由于接收到了客户端shutdownOutput()发来的结束标记,这里while循环结束
}

//5.上传完毕后,将“上传完成”信息反馈给客户端
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("上传成功");

//6.关闭资源
bufw.close();
s.close();
ss.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: