怎么读不出来,socket

corner1988 2012-04-24 11:28:02
public class ClientDemo implements Runnable{
public void run(){
try{
//连接服务器
Socket s=new Socket("127.0.0.1",10033);
//读取本机文件
BufferedReader br=new BufferedReader(new FileReader("j:\\new.txt"));
//获得输出流
System.out.println("获取成功");

PrintWriter out=new PrintWriter(s.getOutputStream(),true);
//增加标记
// long time=System.currentTimeMillis();
//DataOutputStream dos=new DataOutputStream(s.getOutputStream());
//dos.writeLong(time);
//像服务器写文件

String line=null;
while((line=br.readLine())!=null){
out.print(line);
}

System.out.println(line);
//System.out.println("上传成功");
s.shutdownOutput();//关闭客户端输出流,相当于给个-1;
//获得输入流
BufferedReader Sbr=new BufferedReader(new InputStreamReader(s.getInputStream()));
//获得服务器返回信息
String str=Sbr.readLine();
System.out.println(str);
br.close();
s.close();
}

catch(IOException e){
e.printStackTrace();

}

}

}

public class ServerDemo implements Runnable{
public void run(){
try {
ServerSocket ss=new ServerSocket(10033);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected.....");
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
//DataInputStream dis=new DataInputStream(s.getInputStream());
//long l=dis.readLong();
PrintWriter out=new PrintWriter(new FileWriter("text.txt"),true);
String line=null;
while((line=br.readLine())!=null){
//if("over".equals(line)){
//break;
//}
out.print(line);
}
PrintWriter Cout=new PrintWriter(s.getOutputStream());
Cout.write("上传成功");
out.close();
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

public class Demo1 {

/**
* @param args
*/
public static void main(String[] args) {
new Thread(new ServerDemo()).start();
new Thread(new ClientDemo()).start();
}

}

结果
获取成功
127.0.0.1....connected.....
null
null

问题 1,貌似读取就不成功,更没法复制了
问题2,想清空缓冲区,发现无法调用flush()方法
问题3,如果我把 两线程放于两个类中分别启动就报socket reset异常
...全文
198 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
骤逝 2012-04-24
  • 打赏
  • 举报
回复
不要使用readlien去读数据
byte[] temp = new byte[1024];
sck.getInputStream().read(temp)
(ret = sck.getInputStream().read(temp))!=-1
李狗蛋52635 2012-04-24
  • 打赏
  • 举报
回复
问题 1,看看文件是不是空的,在client端读文件那里打断点看有没有读到东西。
问题2,PrintWriter没有flush()吧 应该,可以换用别的DataOutputStream之类。
问题3,要是放在两个类中,也要确认server先启动,client后启动。

本人愚见...
dalancon 2012-04-24
  • 打赏
  • 举报
回复
[codeimport java.net.*;
import java.io.*;

public class TcpClient {

/**
* @param args从服务器向客户端发送一个文件,客户端接收文件并保存
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
while (true) {
Socket client = new Socket("10.33.0.9", 2222);
File f = null;
InputStream in = client.getInputStream();
int b = 0;
String str = "C:/";
while ((b = in.read()) != -1) {
str += (char) b;
}
f = new File(str);
f.createNewFile();
System.out.println("文件创建成功");
client.close();

Socket client1 = new Socket("10.33.0.9", 2222);

int bc = 0;
BufferedInputStream buffin = new BufferedInputStream(
client1.getInputStream());// 将管道中的数据读入缓冲区
FileOutputStream fw = new FileOutputStream(f);
while ((bc = buffin.read()) != -1) {
fw.write(bc);
}
System.out.println("client over");
fw.close();
client1.close();
buffin.close();
}
}
}
/code]
dalancon 2012-04-24
  • 打赏
  • 举报
回复
[code=import] java.net.*;
import java.io.*;
import java.util.*;

public class TcpServer {

/**
*
*/
public static void main(String[ args) throws Exception {
// TODO Auto-generated method stub
while (true) {
ServerSocket server = new ServerSocket(2222);
File f = new File("D:/JavaWorkspace/day12/src/TcpServer.java");

Socket socket = server.accept();
DataOutputStream dos = new DataOutputStream(
socket.getOutputStream());
System.out.println("请输入要传递的文件名");
Scanner in = new Scanner(System.in);
String path = in.next();// 文件名
if (path != null) {
dos.writeBytes(path);
}
dos.flush();
dos.close();
socket.close();


Socket socket1 = server.accept();
DataOutputStream dos1 = new DataOutputStream(
socket1.getOutputStream());

FileInputStream fr = new FileInputStream(f);
int b = 0;
while ((b = fr.read()) != -1) {
dos1.write(b);
}
System.out.println("server over");

dos1.flush();
dos1.close();
server.close();
socket1.close();

}
}

}
][/code]
dalancon 2012-04-24
  • 打赏
  • 举报
回复
这个我刚写了个服务器向客户端传输文件
发给你看看啊

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧