关闭

Socket文件传输

197人阅读 评论(0) 收藏 举报

如果文件是字节类型的文件——音乐、电影、二进制文件等等,则只能使用inputStream和outputStream类

如果文件是字符类型的文件——文本文件等等,则可以使用Reader和Writer这两个类

 

如果使用Reader和Writer这两个类去读取二进制文件会出现异常,文件不是原来的,同样如果使用inputStream和outputStream类去读取文本文件(包含中文),会出现乱码现象,也会导致生产的文件大小不一致

 

下面使用DataInputStream和DataOutputStream读取和写文件,字节流和字符流都正常,能实现文件传输

 

服务器端

package hb.socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Calendar;

public class TCPServerReseiverFile {

	public static void main(String[] args) throws Exception{
		ServerSocket ss = new ServerSocket(6666);
		while(true){
			Socket s = ss.accept();
			InputStream is = s.getInputStream();
			DataInputStream dis = new DataInputStream(is);
			
			FileOutputStream fos = new FileOutputStream("C:\\"+getTimestamp());
			DataOutputStream dos = new DataOutputStream(fos);
			byte[] tempByte = new byte[1024];
			
			int byteread = 0;
			byteread = dis.read(tempByte);
			
			while(byteread != -1){
				dos.write(tempByte, 0, byteread);
				dos.flush();
				byteread = dis.read(tempByte);
			}
			fos.flush();
			fos.close();
			is.close();
			s.close();
		}
	}
	
	public static String getTimestamp(){
		Calendar c = Calendar.getInstance();
		Long timestamp = c.getTimeInMillis();
		return timestamp.toString();
	}
	
}

 

客户端

package hb.socket;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class TCPClientSendFile {

	public static void main(String[] args) throws Exception {
		sendFile("c:\\music.mp3");
	}
	
	public static void sendFile(String urlFile)throws Exception{
		Socket s = new Socket("127.0.0.1", 6666);
		OutputStream os = s.getOutputStream();
		DataOutputStream dos = new DataOutputStream(os);
		
		FileInputStream fis = new FileInputStream(urlFile);
		DataInputStream dis = new DataInputStream(fis);
		byte[] tempByte = new byte[1024];
		
		int n = dis.read(tempByte);
		while(n!=-1){
			dos.write(tempByte, 0, n);
			dos.flush();
			n = dis.read(tempByte);
		}
		
		fis.close();
		dis.close();
		os.close();
		dos.close();
	}

}

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:286567次
    • 积分:8495
    • 等级:
    • 排名:第2296名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:4条
    最新评论