急求把网络输入输出流上的数据存为本地二进制文件的方法 急求把网络socket输入输出流上的数据存为本地二进制文件的方法,就像MSN、QQ等聊天软件的聊天记录的功能。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 过程就是:1、得到相应的网络输入流InputStream is = ***.getInputStream();2、本地创建一个输出流FileOutputStream out = new FileOutputStream(file);3、写到本地while ((i = is.read()) != -1) { out.write(i); } out.flush(); import java.net.*; import java.io.*; import java.lang.*; public class Test { public static void main(String args[]) { String host = "192.168.180.20"; int port = 23,i; Socket socket; String s = "get sysLocation"; //要执行的命令(取设备agent内的节点值) InputStream Is,is = null; OutputStream Os; DataInputStream DIS; PrintStream PS; FileOutputStream out ; try { socket = new Socket(host, port); } catch (UnknownHostException e2) { // TODO 自动生成 catch 块 e2.printStackTrace(); } catch (IOException e2) { // TODO 自动生成 catch 块 e2.printStackTrace(); } try { out= new FileOutputStream(new File("d:\\t")); try { while ((i = is.read()) != -1) { out.write(i); out.flush(); } } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } } catch (FileNotFoundException e1) { // TODO 自动生成 catch 块 e1.printStackTrace(); } } } 我是这样写的,可是报空指针异常啊?我是想控制台接受键盘输入,然后存为二进制文件,应如何改动啊? InputStream Is,is = null; while ((i = is.read()) != -1)------空指针异常了。 还有个问题想请教一下,如何把网络socket输入输出流上的数据存为dat类型文件啊? InputStream Is,is = null; 没有赋值 简单的写了一个程序,估计能完成要求。有一些细节方面没有做处理。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在这里没有用。 小弟先谢谢preferme大哥,不过还是希望能提供下详细的代码,最好是服务器端和客户端分开的那种。如果能用多线程最好了。 1.你的需求不明确。缺少太多的信息。2.如果只是想传文件,那用FTP会更直接一些,或者HTTP下载也可以。3.如果即要服务端有执行客户端命令的功能,又要有传输文件(或数据)的功能,而且还不使用FTP,那必须要写个协议才行。4.第3种情况,编程复杂度太大。你出300分,估计也没几个人帮你做。5.我写的代码也只是抛砖引玉,仅供楼主参考。 我只是想实现MSN等的把聊天记录存到本地文件里的功能而已啊!你欺负人~~~~(>_<)~~~~ ,欺负我的人都是坏人/(ㄒoㄒ)/~~~~o(>_<)o ~~~~~~5555555555555~~~~ 比较汗~~~你想实现MSN等的聊天记录功能,那也得有具体的聊天程序才行啊,没这样的聊天程序,怎么帮你实现日志的记录功能?不会是要我给你编一个聊天程序吧?C/S架构的聊天通讯程序,其实是一个比较复杂的程序。其中涉及到大致4个过程,信息的显示,信息的编码组包,信息的传输,以及信息的拆包解码。楼主想要实现聊天内容的记录功能,打算记录哪个过程的聊天信息?其实,我也是比较郁闷滴。 是这样的,服务器端不停的给客户端发送数据,而客户端就负责把服务器端发送的数据全部记录到本地(dat类型的)文件里。 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(); } }}import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;/** * 该类创建于 2009-6-16 下午03:47:05 * * @version 1.0.0 * @author 9sky */public class Server { private static int Port = 4567;// 服务端监听端口 public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(Port, 10); Socket s = ss.accept(); new Server.Sender(s).start(); } static class Sender extends Thread { Socket s; boolean running = true;//不停地。 Sender(Socket s) { this.s = s; } public void run(){ try{ while(running){ OutputStream os = s.getOutputStream(); String line = "现在时间:"+new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(new java.util.Date())+"\r\n"; byte b [] = line.getBytes("UTF-8"); os.write(b); System.out.println(line); Thread.sleep(10); } }catch(Exception e){ e.printStackTrace(); } } }} 服务端代码import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class ss { public static void main(String[] args) { ServerSocket ss; Socket s; int port=8887; try { ss=new ServerSocket(port); s=ss.accept(); while(true) { s.getOutputStream().write("12ab12cd".getBytes()); } } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } }}客户端代码import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;public class Sockett implements Runnable{ String host = "127.0.0.1"; int port = 8887,i; Socket socket; InputStream is ; FileOutputStream out ; byte [] b=new byte[5000]; byte [] bb=new byte[1]; byte [] bh=new byte[16]; byte [] bp=new byte[6]; Thread th1; public Sockett() { th1=new Thread(this); } public void run() { try {// System.out.println("请输入IP地址");// System.in.read(bh);// host=new String(bh).trim();// //System.out.println("host is"+host);// System.out.println("请输入端口号");// System.in.read(bp);// port=Integer.parseInt(new String(bp).trim()); //System.out.println("port is"+port); socket=new Socket(host,port); is=socket.getInputStream(); out=new FileOutputStream(new File("d:\\\\t2"),true); while(true) { if(is.available()>-1) { i=is.read(b); out.write(b); } System.in.read(bb); char c=(char)bb[0]; if(c=='0') { break; } } out.flush(); is.close(); out.close(); socket.close(); System.out.println("stop"); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } }}我在服务器端连续向客户端发送数据,为何在客户端无法连续写入文件啊?请高人们指点一下我应如何改啊! System.in.read(bb);这句话。程序会停到这句话上面,直到控制台输入一个字符为止。 import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;public class Sockett implements Runnable { String host = "127.0.0.1"; int port = 23, i; Socket socket; InputStream is; FileOutputStream out; byte[] b = new byte[25 * 1024 ]; byte[] bb = new byte[1]; byte[] bh = new byte[16]; byte[] bp = new byte[6]; Thread th1; public Sockett() { th1 = new Thread(this); } public void run() { try { System.out.println("数据截取后,将被保存到本地D盘的根目录下,文件名为“比对文件”"); System.out.println("重新截取数据时,请先把刚建立的用来存放截取数据的文件改名或备份"); System.out.println("结束程序时,请直接关闭命令行窗口"); // System.out.println("结束程序时请直接关闭命令行窗口"); System.out.println("请准确输入主机名或主机IP地址"); System.in.read(bh); host=new String(bh).trim();// //System.out.println("host is"+host); System.out.println("请准确输入端口号"); System.in.read(bp); port=Integer.parseInt(new String(bp).trim()); // System.out.println("port is"+port); System.out.println("重新截取数据时,请先把刚建立的用来存放截取数据的文件改名或备份"); System.out.println("结束程序时,请直接关闭命令行窗口"); socket=new Socket(host,port); is=socket.getInputStream(); out=new FileOutputStream(new File("d:\\\\比对文件"),true); if(is.available()>-1) { i=is.read(b); out.write(b); out.flush(); } out.close(); is.close(); socket.close(); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } }}我把程序改了下,可为何在客户端还是无法连续写入文件啊?请高人们指点一下我应如何改啊! socket和serverSocket的使用在加上java.io.*的使用就可以 貌似楼主的服务端代码中,OutputStream最后没有flush 环形队列问题 关于static ,final修饰函数 获取Iterator里的数据? final和static的用法 我的jdbc连接后sql语句怎么有的不能执行啊 怎样将Label.getText()的文字的一部分(如第1个字)设置成其他颜色?(100奉上) 请教jtextfield的问题 JAVA的安全性究竟怎样体现出来? java中使用socket如何传输2进制数据流。特别是在有中文的情况下。 combox 如何连接数据库中的值 初学者请教 工作问题
1、得到相应的网络输入流
InputStream is = ***.getInputStream();
2、本地创建一个输出流
FileOutputStream out = new FileOutputStream(file);
3、写到本地
while ((i = is.read()) != -1) {
out.write(i);
}
out.flush();
import java.net.*;
import java.io.*;
import java.lang.*;
public class Test {
public static void main(String args[]) {
String host = "192.168.180.20";
int port = 23,i;
Socket socket;
String s = "get sysLocation"; //要执行的命令(取设备agent内的节点值)
InputStream Is,is = null;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
FileOutputStream out ;
try {
socket = new Socket(host, port);
} catch (UnknownHostException e2) {
// TODO 自动生成 catch 块
e2.printStackTrace();
} catch (IOException e2) {
// TODO 自动生成 catch 块
e2.printStackTrace();
}
try {
out= new FileOutputStream(new File("d:\\t"));
try {
while ((i = is.read()) != -1) {
out.write(i);
out.flush();
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
} catch (FileNotFoundException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
}
我是这样写的,可是报空指针异常啊?
我是想控制台接受键盘输入,然后存为二进制文件,应如何改动啊?
while ((i = is.read()) != -1)------空指针异常了。
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();
}
}
}
2.如果只是想传文件,那用FTP会更直接一些,或者HTTP下载也可以。
3.如果即要服务端有执行客户端命令的功能,又要有传输文件(或数据)的功能,而且还不使用FTP,那必须要写个协议才行。
4.第3种情况,编程复杂度太大。你出300分,估计也没几个人帮你做。
5.我写的代码也只是抛砖引玉,仅供楼主参考。
你欺负人~~~~(>_<)~~~~ ,欺负我的人都是坏人/(ㄒoㄒ)/~~~~o(>_<)o ~~~~~~5555555555555~~~~
你想实现MSN等的聊天记录功能,那也得有具体的聊天程序才行啊,没这样的聊天程序,怎么帮你实现日志的记录功能?
不会是要我给你编一个聊天程序吧?C/S架构的聊天通讯程序,其实是一个比较复杂的程序。
其中涉及到大致4个过程,信息的显示,信息的编码组包,信息的传输,以及信息的拆包解码。楼主想要实现聊天内容的记录功能,打算记录哪个过程的聊天信息?其实,我也是比较郁闷滴。
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();
}
}}import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/**
* 该类创建于 2009-6-16 下午03:47:05
*
* @version 1.0.0
* @author 9sky
*/
public class Server { private static int Port = 4567;// 服务端监听端口 public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(Port, 10);
Socket s = ss.accept();
new Server.Sender(s).start();
} static class Sender extends Thread {
Socket s;
boolean running = true;//不停地。
Sender(Socket s) {
this.s = s;
}
public void run(){
try{
while(running){
OutputStream os = s.getOutputStream();
String line = "现在时间:"+new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(new java.util.Date())+"\r\n";
byte b [] = line.getBytes("UTF-8");
os.write(b);
System.out.println(line);
Thread.sleep(10);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
import java.net.ServerSocket;
import java.net.Socket;
public class ss {
public static void main(String[] args) {
ServerSocket ss;
Socket s;
int port=8887;
try {
ss=new ServerSocket(port);
s=ss.accept();
while(true)
{
s.getOutputStream().write("12ab12cd".getBytes());
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} }}
客户端代码import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class Sockett implements Runnable
{
String host = "127.0.0.1";
int port = 8887,i;
Socket socket;
InputStream is ;
FileOutputStream out ;
byte [] b=new byte[5000];
byte [] bb=new byte[1];
byte [] bh=new byte[16];
byte [] bp=new byte[6];
Thread th1;
public Sockett()
{
th1=new Thread(this);
}
public void run()
{
try {
// System.out.println("请输入IP地址");
// System.in.read(bh);
// host=new String(bh).trim();
// //System.out.println("host is"+host);
// System.out.println("请输入端口号");
// System.in.read(bp);
// port=Integer.parseInt(new String(bp).trim());
//System.out.println("port is"+port);
socket=new Socket(host,port);
is=socket.getInputStream();
out=new FileOutputStream(new File("d:\\\\t2"),true);
while(true)
{
if(is.available()>-1)
{
i=is.read(b);
out.write(b);
}
System.in.read(bb);
char c=(char)bb[0];
if(c=='0')
{
break;
}
}
out.flush();
is.close();
out.close();
socket.close();
System.out.println("stop");
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}}我在服务器端连续向客户端发送数据,为何在客户端无法连续写入文件啊?请高人们指点一下我应如何改啊!
这句话。程序会停到这句话上面,直到控制台输入一个字符为止。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;public class Sockett implements Runnable {
String host = "127.0.0.1"; int port = 23, i; Socket socket; InputStream is; FileOutputStream out; byte[] b = new byte[25 * 1024 ]; byte[] bb = new byte[1]; byte[] bh = new byte[16]; byte[] bp = new byte[6]; Thread th1; public Sockett() {
th1 = new Thread(this);
} public void run()
{
try {
System.out.println("数据截取后,将被保存到本地D盘的根目录下,文件名为“比对文件”");
System.out.println("重新截取数据时,请先把刚建立的用来存放截取数据的文件改名或备份");
System.out.println("结束程序时,请直接关闭命令行窗口"); // System.out.println("结束程序时请直接关闭命令行窗口");
System.out.println("请准确输入主机名或主机IP地址");
System.in.read(bh);
host=new String(bh).trim();
// //System.out.println("host is"+host);
System.out.println("请准确输入端口号");
System.in.read(bp);
port=Integer.parseInt(new String(bp).trim());
// System.out.println("port is"+port);
System.out.println("重新截取数据时,请先把刚建立的用来存放截取数据的文件改名或备份");
System.out.println("结束程序时,请直接关闭命令行窗口"); socket=new Socket(host,port);
is=socket.getInputStream();
out=new FileOutputStream(new File("d:\\\\比对文件"),true);
if(is.available()>-1)
{
i=is.read(b);
out.write(b);
out.flush();
}
out.close();
is.close();
socket.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} }
}
我把程序改了下,可为何在客户端还是无法连续写入文件啊?请高人们指点一下我应如何改啊!