您的位置:首页 > 编程语言 > Java开发

Java疑问:-------在Socket中用PrintWriter 写入的数据为什么用DataInputStream不能读取?

2015-08-06 15:54 701 查看
在Socket中用PrintWriter 写入的数据为什么用DataInputStream不能读取?

原因是什么???

其本质原因是什么???



/*

* 功能:是一个服务器,在9999端口上监听

* 可以通过控制台,输入会送给客户端的信息。

* 总共需要多少流???

* 1.把数据写入套接字流

* 2.从套接字中读取数据流

* 3.从控制台接收流

* 3.

*

*

* */

package com.test1;

import java.io.DataInputStream;

import java.io.IOException;

import java.net.*;

import java.io.*;

public class MyServer2

{

public static void main(String[] args)

{

MyServer2 ms2=new MyServer2();

}

public MyServer2()

{

try {

// 提示

System.out.println("我正在9999监听。。。。");

// 在9999端口上监听

ServerSocket ss=new ServerSocket(9999);

// 等待连接

Socket s=ss.accept();

// 先接收客户端发来的信息

//InputStreamReader isr=new InputStreamReader(s.getInputStream());

DataInputStream dis=new DataInputStream(s.getInputStream());

//BufferedReader br=new BufferedReader(isr);

PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

// 接收从控制台输入的信息

InputStreamReader isr2=new InputStreamReader(System.in);

BufferedReader br2=new BufferedReader(isr2);// 这个流是用于读取Socket连接的。

while(true)

{

//

//String infoFromClient=br.readLine();

//

//System.out.println("客户端发来:"+infoFromClient);

String get=
dis.readUTF();System.out.println("客户端发来:"+get);

//接收从控制台输入的信息

// 提示

System.out.println("输入你希望对客户端说的话");

String response =br2.readLine();

// 把从控制台接收的信息,写入套接字

pw.println(response);

//在Socket中用PrintWriter 写入的数据为什么用DataInputStream不能读取?

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package com.test1;

import java.net.*;

import java.io.*;

public class MyClient2

{

public static void main(String[] args)

{

MyClient2 mc2=new MyClient2();

}

public MyClient2()

{

try {

// 去连接服务器端

Socket s=new Socket("127.0.0.1",9999);

//PrintWriter pw=new PrintWriter(s.getOutputStream(),true); // 刚才估计是因为,这个true 没写,才造成:客户端发送的数据,服务器端无法接收。

DataOutputStream dos=new DataOutputStream(s.getOutputStream());

//OutputStreamWriter osw=new OutputStreamWriter(dos);

//BufferedWriter bw=new BufferedWriter(osw);

// 客户端也需要一个流用于从控制台接收信息

InputStreamReader isr=new InputStreamReader(System.in);

BufferedReader br=new BufferedReader(isr);

// 再创建一个流,用以从套接字流中读出内容

/*InputStreamReader isr2=new InputStreamReader(s.getInputStream());

BufferedReader br2=new BufferedReader(isr2);这个可以正常读取*/

InputStreamReader isr2=new InputStreamReader(s.getInputStream());

BufferedReader br2=new BufferedReader(isr2);

// 现在修改,看看用DataInputStream能不能读取?

//DataInputStream dis=new DataInputStream(s.getInputStream());

while(true)

{

// System.out.println("请输入你想对服务器说的话");

// 客户端先从控制台接收

//String info =br.readLine();

//System.out.println("从控制台接收的话:"+info);// 这句话能执行,为什么dos.writeUTF()不能执行???

// 然后发送给服务器

//pw.println(info);

dos.writeUTF("你好啊!");

//dos.flush(); 我看看去掉,dos.flush()行不行? 事实证明:也可以

//bw.write(info);

/*dos.writeBytes(info);

dos.flush();这个也不行啊,究竟是为什么呢???*/

// 在这里将pw换成dos

//dos.writeChars(info);
这个也不行

//dos.writeUTF(info);// 看一下能正常通信不能?:经过验证,不能通信。

// 接收从服务器发来的话

/*这个可以正常读取,现在替换 String res=
br2.readLine();

System.out.println("服务器说:"+res);*/

/*String res=dis.readUTF();

System.out.println("用DataInputStream读取,服务器说:"+res);在Socket中用PrintWriter 写入的数据为什么用DataInputStream不能读取?*/

String res=
br2.readLine();

System.out.println("服务器说:"+res);

}

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: