import java.net.* ;
import java.io.* ;
import java.util.*;
public class EchoClient{
public static void main(String args[]) throws Exception { // 所有异常抛出
Socket client = new Socket("localhost",8888) ;// 表示客 户端
Scanner sc=new Scanner(System.in);
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ; // 一次性接收完成
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())) ;//发送
//PrintStream out = new PrintStream(client.getOutputStream()) ;
System.out.print("输入信息:") ;
String str =sc.nextLine() ; // 接收键盘的输入信息
out.write(str) ;
//out.println(str+"\r\n"); readLine读取是是按回车换行符结束的!我加上回车换行可还是不行???????
String echo = buf.readLine() ; // 接收返回结果
System.out.println(echo) ; // 输出回应信息
buf.close() ;
client.close() ;
}
};
------------------------------------------------------------
import java.net.* ;
import java.io.* ;
public class EchoServer{
public static void main(String args[]) throws Exception { // 所有异常抛出
ServerSocket server = new ServerSocket(8888) ; // 服务器在8888端口上监听,定义ServerSocket类
System.out.println("服务器运行,等待客户端连接。") ;
Socket client = server.accept() ; // 得到连接,程序进入到阻塞状态
// 准备接收客户端的输入信息
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
PrintStream out = new PrintStream(client.getOutputStream()) ;
//BufferedWriter out=new BufferedWriter(new OutputStreamWriter(client.getOutputStream())) ;//发送
String str = buf.readLine() ; // 接收客户端发送的内容
System.out.println(str);
out.println("ECHO : " + str) ; // 回应信息
//out.write("ECHO : " + str);
client.close() ;
server.close() ;
}
};
-----------------------------------------------------------------------------
我是准备写一个客户端输出信息,通过服务端把客户端发的信息在返回去,并加上“ECHO:”
可是我用BufferedWriter 这个类把内容就是传不过去,一直停留在输入状态!我认为是服务器端还不知道信息结束,可是readLine是看到回车符就把这条信息读取,用PrintStream 可以,为什么用BufferedWriter 及不可以呢??
用这两个类进行数据的发送有区别吗??我看PrintStream 的源码println方法是这样的: public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
它同样是用BufferedWriter类的write方法进行输入,并加一个换行符啊??为什么我用BufferedWriter却不行呢?我也加换行符啦? |