日期:2014-05-20  浏览次数:20869 次

急求把网络输入输出流上的数据存为本地二进制文件的方法
急求把网络socket输入输出流上的数据存为本地二进制文件的方法,就像MSN、QQ等聊天软件的聊天记录的功能。

------解决方案--------------------
过程就是:
1、得到相应的网络输入流
InputStream is = ***.getInputStream();
2、本地创建一个输出流
FileOutputStream out = new FileOutputStream(file);
3、写到本地
while ((i = is.read()) != -1) {
out.write(i);
}
out.flush();
------解决方案--------------------
1 楼的方法差不多了
------解决方案--------------------
1楼的写法就是二进制文件
------解决方案--------------------
Java code
InputStream   Is,is = null;

------解决方案--------------------
Java code
InputStream   Is,is = null;  没有赋值

------解决方案--------------------
简单的写了一个程序,估计能完成要求。有一些细节方面没有做处理。
Java code
package houlei.test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 推荐使用两个线程来处理,本代码是单线程的程序。
 *
 * 该类创建于 2009-6-12 上午02:11:49
 * @version 1.0.0
 * @author 侯磊
 */
public class RecordIOInfo {

    public static final String Exit = "exit";
    
    public static void main(String[] args) throws Exception{
        Socket socket = new Socket("192.168.180.20",23);
        InputStream cIn = System.in;
        InputStream sIn = socket.getInputStream();
        OutputStream sOut = socket.getOutputStream();
        OutputStream fOut = new FileOutputStream("D:\\save.dat");
        boolean running = true;
        try{
            while(running){
                if(cIn.available()>0){//将控制台的信息传输给Socket
                    sOut.write(cIn.read());
                }
                if(sIn.available()>0){//将Socket传过来的数据存储到文件当中
                    fOut.write(sIn.read());
                }
                Thread.sleep(10);
            }
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            fOut.close();
            socket.close();
        }
    }
    

}

------解决方案--------------------
哦。忘了每次write后要flush了。还有那个常量Exit在这里没有用。
------解决方案--------------------
共同学习了 up
------解决方案--------------------
1.你的需求不明确。缺少太多的信息。
2.如果只是想传文件,那用FTP会更直接一些,或者HTTP下载也可以。
3.如果即要服务端有执行客户端命令的功能,又要有传输文件(或数据)的功能,而且还不使用FTP,那必须要写个协议才行。
4.第3种情况,编程复杂度太大。你出300分,估计也没几个人帮你做。
5.我写的代码也只是抛砖引玉,仅供楼主参考。
------解决方案--------------------
比较汗~~~
你想实现MSN等的聊天记录功能,那也得有具体的聊天程序才行啊,没这样的聊天程序,怎么帮你实现日志的记录功能?
不会是要我给你编一个聊天程序吧?

C/S架构的聊天通讯程序,其实是一个比较复杂的程序。
其中涉及到大致4个过程,信息的显示,信息的编码组包,信息的传输,以及信息的拆包解码。

楼主想要实现聊天内容的记录功能,打算记录哪个过程的聊天信息?

其实,我也是比较郁闷滴。
------解决方案--------------------
楼主应该把问题说我更详细点
------解决方案--------------------
Java code

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 推荐使用两个线程来处理,本代码是单线程的程序。
 * <p/>
 * 该类创建于 2009-6-16 下午03:42:50
 * 
 * @version 1.0.0
 * @author 9sky
 */
public class RecordIOInfo {

    private static String Host = "127.0.0.1";// 服务端IP
    private static int Port = 4567;// 服务端监听端口
    private static String FileName = "D:\\save.dat";
    
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket(Host, Port);
        InputStream cIn = System.in;
        InputStream sIn = socket.getInputStream();
        OutputStream sOut = socket.getOutputStream();
        OutputStream fOut = new FileOutputStream(FileName);
        boolean running = true;
        try {
            while (running) {
                if (cIn.available() > 0) {// 将控制台的信息传输给Socket
                    sOut.write(cIn.read());
                    sOut.flush();
                }
                if (sIn.available() > 0) {// 将Socket传过来的数据存储到文件当中
                    fOut.write(sIn.read());
                    fOut.flush();
                }
                Thread.sleep(10);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            fOut.close();
            socket.close();
        }
    }

}