Socket文件传输

如果文件是字节类型的文件——音乐、电影、二进制文件等等,则只能使用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();
	}

}

 

 

阅读更多
上一篇概念解释
下一篇BigDecimal自学笔记
想对作者说点什么? 我来说一句

socket文件传输

2011年08月12日 154KB 下载

聊天 文件传输 socket

2011年11月14日 40KB 下载

socket文件传输示例(C++)

2013年04月11日 47KB 下载

windows下SOCKET实现文件传输

2010年09月25日 30KB 下载

没有更多推荐了,返回首页

关闭
关闭