socket编程(二):TCP传文本文件、传二进制文件

本文详细介绍了如何使用TCP socket在Java中进行文本文件和二进制文件的传输。内容包括client端发送文件路径,server端响应并发送选定文件的实现过程,以及在传输过程中遇到的中文乱码和文件传输结束判断等问题的解决方法。实验结果显示,通过调整输入输出流设置,可以成功避免乱码,并确保文件完整传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

承上篇文章: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值