写了个测试代码,功能是客户端发一个文件路径给服务器,服务器读取文件后传给客户端,并在客户端控制台显示文件内容。
现在服务器端debug运行到String fileName = bufReader.readLine();就一直死在这了,由于是新手,能想的办法都试了。求大神帮忙了
客户端import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class RemoteClient {
public static void main(String[] args) {
try {
Socket client = new Socket("127.0.0.1", 4000);
InputStream inputFromSocket = client.getInputStream();
OutputStream outputToSocket = client.getOutputStream();
BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(outputToSocket));
bufWriter.write("F:/temp/RemoteFile.txt");
bufWriter.flush();
// PrintWriter pWriter = new PrintWriter(outputToSocket);
// pWriter.println("F:/temp/RemoteFile.txt");
BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputFromSocket));
String line=null;
while((line=bufReader.readLine()) !=null){
System.out.println(line +"\n");
}
bufWriter.close();
bufReader.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务器端import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class RemoteServer { public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(4000);
Socket incomingConnection = null;
InputStream inputFromSocket = null;
OutputStream outputToScoket = null;
while(true){
incomingConnection = server.accept();
inputFromSocket = incomingConnection.getInputStream();
outputToScoket = incomingConnection.getOutputStream();
//input处理
BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputFromSocket));
String fileName = bufReader.readLine();
FileReader fileReader = new FileReader(new File(fileName));
BufferedReader bufFile = new BufferedReader(fileReader);
//output处理
PrintWriter pWriter = new PrintWriter(outputToScoket);
//将文件的string输入到pWriter
String line = null;
while((line = bufFile.readLine()) != null){
pWriter.write(line +"\n");
// pWriter.print(line + "\n");
// pWriter.println(line);
}
pWriter.close();
bufFile.close();
bufReader.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}socketJava测试
现在服务器端debug运行到String fileName = bufReader.readLine();就一直死在这了,由于是新手,能想的办法都试了。求大神帮忙了
客户端import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class RemoteClient {
public static void main(String[] args) {
try {
Socket client = new Socket("127.0.0.1", 4000);
InputStream inputFromSocket = client.getInputStream();
OutputStream outputToSocket = client.getOutputStream();
BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(outputToSocket));
bufWriter.write("F:/temp/RemoteFile.txt");
bufWriter.flush();
// PrintWriter pWriter = new PrintWriter(outputToSocket);
// pWriter.println("F:/temp/RemoteFile.txt");
BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputFromSocket));
String line=null;
while((line=bufReader.readLine()) !=null){
System.out.println(line +"\n");
}
bufWriter.close();
bufReader.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务器端import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class RemoteServer { public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(4000);
Socket incomingConnection = null;
InputStream inputFromSocket = null;
OutputStream outputToScoket = null;
while(true){
incomingConnection = server.accept();
inputFromSocket = incomingConnection.getInputStream();
outputToScoket = incomingConnection.getOutputStream();
//input处理
BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputFromSocket));
String fileName = bufReader.readLine();
FileReader fileReader = new FileReader(new File(fileName));
BufferedReader bufFile = new BufferedReader(fileReader);
//output处理
PrintWriter pWriter = new PrintWriter(outputToScoket);
//将文件的string输入到pWriter
String line = null;
while((line = bufFile.readLine()) != null){
pWriter.write(line +"\n");
// pWriter.print(line + "\n");
// pWriter.println(line);
}
pWriter.close();
bufFile.close();
bufReader.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}socketJava测试
解决方案 »
- [分享] 改变 public static final String obj 的值的方法
- 烦请各位看一下这个程序不知道是哪里错了
- 没多少分!但是还是希望众人拾柴火焰高吧!想统计下大家知道的例外、异常,能帮助新手尽快的处理问题!我先发几个
- 帮忙用JAVA编写一个点类和一个矩形类!谢谢好心的你!
- 一道关于垃圾收集器的面试题
- 一个很弱智的问题,请各位大大帮帮忙
- java2编程21天自学通这本书如何
- 怎么这个requestFocus()不好使? 看似简单的问题怎么在我的程序中就不行?ivjJTextField1.requestFocus()得不到焦点!问题出在哪里?
- java基础 --- 线程问题
- 一个问题,JRE和JDK什么关系,为什么程序在JDK可以运行,还要JRE
- 本地服务器和客户端之间的通信
- x = x + (x++) + (++x) 计算顺序
bufWriter.write("F:/temp/RemoteFile.txt\n");
但还是有些疑惑,例如我从一个.txt文本中读取内容,就一行,没有用到回车之类的换行符,
可是用bufferedRead.readLine()还是可以读到这段文本呀? 难道是文本默认在后面都有换行符吗?
//一直处于等待状态,所以你应该new一个io来操作文件,然后把需要的东西通过socket获取的io发送给对方。
OutputStream outputToSocket = client.getOutputStream();
BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(outputToSocket));
只是自己测试的代码。现实中,客户和服务器不在同一台机上,也可能遇到类似的问题吧
不敢是不是一台机子,读取文件的流不应该通过socket获取,除非你是读取通过另一端发送过来的。socket建立的流通道只有一方发送,另一方的input才会读取内容,否则就会一直处于等待状态。lz好好理理思路。
只是自己测试的代码。现实中,客户和服务器不在同一台机上,也可能遇到类似的问题吧
不敢是不是一台机子,读取文件的流不应该通过socket获取,除非你是读取通过另一端发送过来的。socket建立的流通道只有一方发送,另一方的input才会读取内容,否则就会一直处于等待状态。lz好好理理思路。 恩~我的想法是客户端发一个文件名给服务器,服务器将读到的文件流直接给了socket,再通过readLine获取流中的内容。和你说的一边在发送,另一边read类似吧。现在发现阻塞的原因是 bufWriter.write("F:/temp/RemoteFile.txt");在服务器端readLine不到(加了"\n"可以)。
现在的不太理解为什么bufferedReader.readLine()读取文本文件时,一行也能读取,文本会自动补/n吗?我用UltraEdit转成二进制也没有看到结尾字符呢。
只是自己测试的代码。现实中,客户和服务器不在同一台机上,也可能遇到类似的问题吧
不敢是不是一台机子,读取文件的流不应该通过socket获取,除非你是读取通过另一端发送过来的。socket建立的流通道只有一方发送,另一方的input才会读取内容,否则就会一直处于等待状态。lz好好理理思路。 恩~我的想法是客户端发一个文件名给服务器,服务器将读到的文件流直接给了socket,再通过readLine获取流中的内容。和你说的一边在发送,另一边read类似吧。现在发现阻塞的原因是 bufWriter.write("F:/temp/RemoteFile.txt");在服务器端readLine不到(加了"\n"可以)。
现在的不太理解为什么bufferedReader.readLine()读取文本文件时,一行也能读取,文本会自动补/n吗?我用UltraEdit转成二进制也没有看到结尾字符呢。在输出客户端和服务器端额输出流
bufWriter.write("...")
bufWriter.flush();//强制刷新缓冲区