解决方案 »

  1.   

    我是初学者,简单的提示一下:是不是要设置一下 bi n 格式 ,就类似通过 FTP 传文件一样。
      

  2.   

    字符串是有编码格式的,给定一组字节数组,那么就会按指定的编码格式(没有就是默认的系统编码)编码;比如是中文操作系统,可能就是GBK,那么读取字节数组的时候,根据该编码格式转义成字符,如果该字节就会被变成问号或者烫什么的乱码。楼主可以做这样一个实验,new String(new String("12图片".getBytes("UTF-8"), "GBK").getBytes("GBK"),"UTF-8"); 出现还是乱码。这个例子的意思是字节数组被编码之后,如果认不出来会改动原来的字节然后变成问号或者其他符号,不可逆了(ISO-8859-1除外,所以tomcat会先用这个编码一下)。说到这里楼主应该明白了吧,字符(串)是用来显示的,认不出它会乱来,因为它必须要显示! 所以转了一下之后,字节文件以及被玩坏了。此外,再向楼主诚恳地提几个建议
    线程安全注意了吗
    聊天内容是存入数据库的吗?  频繁地读写还可以优化吗?  弄个Redis什么做个缓存
    聊天可以发这样的的表情吗,或者抖动窗口?
    我以前也写过这样同学称之为”约炮网站“的东西~~~~wish you better sincerely
      

  3.   

    FileReader fr = new FileReader("C:\\\error.txt");
    BufferedReader br = new BufferedReader(fr);
    String str="":
    while((readStr = br.readLine())!=null){
    str +=readStr ;
    }//换一种试试
      

  4.   

    回复3楼:
    经过您这样一说,我立刻去尝试了,
    代码如下:
    System.out.println("实验转码:"+new String(new String("12图片".getBytes("UTF-8"), "GBK").getBytes("GBK"),"UTF-8"));
    结果如下:
    实验转码:12图片
    上面不是吐槽啊,
    虽然没有出现乱码,但是我还是能理解您你想表达的是什么意思,这样也的确说得通为什么.txt没问题,而.doc和.png出问题。
    之后,关于您后面的问题,我真心是初学者,所以,现在只是在做传送文件,关于线性安全这些,真心还没有想过= =
    不过,你给的意见对我的确很大作用,非常感谢!
      

  5.   

    居然一个用户不能连续回复3条以上,所以回复不了3楼一下的,现在补上去:
    回复4楼:
    现在我用的是这种流读取文件:
    DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
    感觉可以,读取成功。你的我也会作为一种参考啦,谢谢您的帮忙啦
      

  6.   

    回复5楼:
    面向字节,这一点我现在清楚了。
    不过传送字节,就得用传送直接的write()和接收字节的read()
    不过现在有一个问题困扰着我,能有上面这些方法的,现在只是找到对象流
    如:ObjectInputStream ois=new ObjectInputStream(so.getInputStream());
    这个流的read()方法可以读取字节;
    而另外一张BufferedReader br = new BufferedReader(new InputStreamReader(so.getInputStream()));
    这种流,不能read方法不能接收字节,只能收字符。
    综上,我是用BufferedReader 传送聊天信息,用ObjectInputStream 传送文件,但现在的进度是,又是成功,有时失败,完全搞不懂为什么。
      

  7.   

    回复11楼:
    用得是TCP,传文件防丢包,安全可靠啦
      

  8.   

    關注中,還不會用TCP傳文件。
      

  9.   

    请通通用type传和接受,你看一下buffereader,printwrite的API就明白了
      

  10.   

    回复16楼:
    嗯嗯,好的,正在看。
    顺便问一下大家,你们如果做接收文件,是否会开另外一个socket端口和线程?
      

  11.   

    这个我觉得可以结贴了。我这边也算是完成了一个基本的聊天程序。我最后发现,传送文件,还是用两个端口好一点,这样跟聊天的那个端口就不会有冲突。
    另外,
    读文件用的流是:DataInputStream disfile = new DataInputStream(new FileInputStream(file));
    而传送文件的字节用的是对象流:DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
    接收也是用的是对象流:DataInputStream dis = new DataInputStream(socket.getInputStream());
    写文件用的流是:DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
    还有,貌似是因为TCP是单传输的,每次真的保证只有一条信息发给服务器,一条信息返回。如果同一个客户端的端口进行多条信息,小心无法识别啊。所以传文件和聊天我分开两个端口来做了。
    最后,谢谢大家的各种帮忙和关注
    结贴咯!