使用socket传送文件时,通过流可以传送文件,这个没什么难度。
但是传送了文件之后,确无法知道此文件是什么类型的(比如是txt?bmp?ppt?),导致无法将此文件正确命名,请问如何把文件名和文件类型也通过socket传送给服务器?谢谢大家!

解决方案 »

  1.   

    你在传送的时候一般要先把文件名如123.txt单独的文件头流传给对方,对方接受到文件名后再要求你传送数据流,涉及到接受方要判断数据流是什么数据头还是文件本身。
      

  2.   

    用xml描述一下,在每段数据包前加入
    <file name="hello" type = "bmp" length="138900"/>这样的描述数据 标示大小 类型 长度等
      

  3.   

    如果楼主不嫌麻烦的话,可以先用File类里面的getName先获得文件的名字(fileName),然后把fileName作为参数传递过去,这样名字和文件类型都在里面了。至于传文件内容你是没有问题的
      

  4.   

    学会面向对象的编程方式,传输文件的时候不是非要用字节流的。用对象流一样可以。你可以自己封装一个专门用于传输文件的FileObject实现Serializable接口。里面可以有文件名,文件大小等等属性,文件数据则可以用byte[]来保存,你用socket传这个对象过去,另一端在解析成这个对象不就能取出他的文件名,文件大小,以及此次传输的文件数据。
      

  5.   

    虽然对象流是可以,但是当是大文件的时候呢?你的byte数组会有多大啊,大哥
      

  6.   

    我不是说了吗不是一次性就把整个文件数据都放进去的,跟传输流一样的这次读多少个byte放到byte[]中传输到接收端。你传文件不也是先开文件读取流,读一段写到socket中去吗,一样的道理读一段就放到这个FileObject的byte[]中写到socket中去
      

  7.   

       借鉴http文件上传时的传输方式。
       http://tkxxd.net/thread-307-1-1.html。