tcp socket通信  文件名和文件一起传输
遇到一个问题,client端和server端通过tcp socket传输图片,假设是本地文件test.png,我想把文件名和图片一起传输过去,试了很久,发现一直解码不正确,不知道该怎么办,小弟对io操作确实不是很熟悉,贴一下代码,求指点。
求高人指点啊,我也不知道我为什么只能给62分最高,本来应该给100分的,先感激不尽了。
Client端
public class Client {
	private static final int PORT = 6666;
	private static final String IP = "127.0.0.1";
	private static String subject = "Floating";
         private static String fileName = "test.png";
         private static String filePath = "/Users/junxiyin/Desktop/"+fileName;	
	public static void main(String[] args){		
		OutputStream outputStream = null;
		FileInputStream fis = null;		
		try{
			Socket s = new Socket(IP, PORT);    
			fis = new FileInputStream(filePath);   
			outputStream = s.getOutputStream();   
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));								
			StringBuffer sb = new StringBuffer();
			sb.append(fileName + "/n/joshua");		    			
			byte[] buffer = new byte[8192];  //建立一个buffer,将数据暂时存储,避免多次读写硬盘
			int temp = 0 ;
			while((temp = fis.read(buffer))!= -1){    //从inputStream读取数据并将其存储在buffer中
			sb.append(new String(buffer,0,temp));
			}			
			bw.write(sb.toString());
			System.out.println("from the client " + sb.toString());			
			fis.close();
			bw.flush();     
			bw.close();
		    s.close();			
		} catch (Exception e) {
			e.printStackTrace();
		}				
	}
}
Server端
public class Server {
	public static void main(String[] args){
		InputStream is = null;
		BufferedReader br = null;
		String temp = null;
		OutputStream os = null;
		StringBuffer str = new StringBuffer();
		try {
			ServerSocket ss = new ServerSocket(6666);
			Socket s = ss.accept();
			is = s.getInputStream();
			br = new BufferedReader(new InputStreamReader(is));			
			while((temp = br.readLine()) != null){   
			      str.append(temp);
			}	
			String[] strDest = str.toString().split("/n/joshua");		        
			if(strDest.length != 2)	                
System.err.println("error: strDest.length != 2");
		        System.out.println(strDest.length);	         
	                // fileName
	                System.out.println("fileName: " + strDest[0]);	         
	                // file
	                System.out.println("file: " + strDest[1]);	         	       
	                File file = new File("/Users/junxiyin/Desktop/testCopy.png");
	                os = new FileOutputStream(file);
	                os.write(strDest[2].getBytes());
			os.flush();
			os.close();	         
	                is.close();
			s.close();			
			}catch (
IOException e) {
			    e.printStackTrace();
		        }
			}
}
------解决方案--------------------
分开传好一些。
------解决方案--------------------String[] strDest = str.toString().split("/n/joshua");
这肯定有问题的,str.toString一是编码不确定,一是你怎么保证图片字节流中不包含joshua的编码。
好点的办法是:
自己定义一个包的格式:
比如从前到后,
2B:包总长
1B:文件名长
XB:文件名数据
YB:图片数据
其中B表示字节,XB表示文件名实际长度,YB表示图片数据长度
------解决方案--------------------传输图片 不应该用字符流啊~~~应该是用字节流
------解决方案--------------------给你抄点代码,大体是2楼那个意思。
定义个结构,先传文件名长度,通过这个长度取文件名,再得到开始下载的文件偏移量。
资源下载:http://download.csdn.net/detail/AFer198215/3647106