承上篇文章:socket编程:TCP、UDP传字符串
传输中关于输入输出流和字符格式的问题上一篇大多有说过。
代码有些细节部分可能没有注意到,比如已知字节数可以判断循环终止然后又设了行数,对于流的初始化不够简洁等。主要是把两部分代码放在一起完成了,有些代码是一开始没有设计的后来填补上的,可能有重复,或者有效率更高的方法,大家自行斟酌。
一、利用TCP传文本文件
1、代码
实现client端先发送目录路径,server端返回目录内容,client端进行选择后server发送选择的文件的功能,代码如下,略去导入部分:
客户端:
public class TCPfileclient {
public static void main(String args[]) throws IOException {
String dirurl;//目录路径
String dircontent;//文件夹内容
String filename;//文件名
String saveurl="C:\\Users\\Lenovo\\Desktop";//保存路径
Socket clientSocket=new Socket("localhost",10001);
BufferedReader infromUser=new BufferedReader(new InputStreamReader(System.in));//定义字符输入流对象,从键盘读入数据
DataOutputStream outToServer=new DataOutputStream(clientSocket.getOutputStream());//给socket赋予输出流
BufferedReader infromServer=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));//给socket赋予输入流
dirurl=infromUser.readLine()+'\n';//读入目录路径
outToServer.write(dirurl.getBytes());//发送给server
outToServer.flush();//传输时要用flush(),把数据推出去,不然可能在缓存中没有传过去
dircontent=infromServer.readLine();//获得目录
while(dircontent.equals("is not a folder")) {//不是文件夹重输
System.out.println("不是文件夹,请重新选择:");
dirurl=infromUser.readLine()+'\n';//读入目录路径
outToServer.write(dirurl.getBytes());//发送给server
outToServer.flush();
dircontent=infromServer.readLine();//获得目录
}
System.out.println("文件夹目录为:"+dircontent);//显示目录
System.out.println("请选择文件:");
filename=infromUser.readLine()+'\n';//控制台选择文件
outT