Socket文件传输

原创 2013年12月04日 10:05:54

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

}

 

 

相关文章推荐

socket文件传输.

  • 2015年05月27日 08:55
  • 14KB
  • 下载

用Socket实现PC和手机的文件传输

PC服务器端代码:/* * PC与Android客户端实现文件的传送 * PC服务器端 */ package com.android.test; import java.io.Buff...

socket文件传输源码

  • 2004年07月13日 00:00
  • 39KB
  • 下载

Socket文件传输源码

  • 2008年09月09日 19:48
  • 135KB
  • 下载

Linux socket文件传输

参考资料 [1]套接字传输文件的试验

SOCKET文件传输

  • 2008年03月09日 15:13
  • 20KB
  • 下载

socket文件传输

  • 2012年05月27日 23:43
  • 8KB
  • 下载

Java Socket编程 - 基于TCP方式的二进制文件传输

一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成。 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: ...
  • jia20003
  • jia20003
  • 2012年12月02日 13:02
  • 15276

Android Socket 文件传输

  • 2016年11月18日 10:43
  • 203KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Socket文件传输
举报原因:
原因补充:

(最多只允许输入30个字)