本帖最后由 周兴中 于 2012-6-23 01:57 编辑
import java.io.*;
import java.net.*;
class TransClicet {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Socket s=new Socket("192.168.1.107",10005);
//定义读取键盘数据的 数据流
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//定义目的,将数据写到socket输出流,发给服务端
BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//定义一个socket读取流;读取服务端返回的大写信息。
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String line =null;
while((line=bufr.readLine())!=null)
{
bufOut.write(line);//此处你应该是多写了一行,这样的话你这程序向服务端每写了一行数据中包含了两段相同的来自键盘的数据.
if ("over".equals(line))
break;
bufOut.write(line);
bufOut.newLine();//如果不加这句话,服务器的readLine()方法将会一直处于等待状态.在等待回车符
bufOut.flush();如果不刷新缓冲区,服务器端将收不到数据.
//刷新后缓冲区的数据出去
String str=bufIn.readLine();
System.out.println("server"+str);
}
bufr.close();
s.close();
}
}
class TransServer
{
public static void main (String[] args) throws IOException
{
ServerSocket ss= new ServerSocket(10005);
Socket s=ss.accept();
String ip =s.getInetAddress().getHostAddress();
System.out.print(ip+"......connectted");
//读取socket读取流中的数据
BufferedReader bufIn=new BufferedReader (new InputStreamReader(s.getInputStream()));
//将大写数据写入socket输出流。并发给客户端
BufferedWriter bufOut =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line =null;
while ((line=bufIn.readLine())!=null)//阻塞式方法readLine()当读到输出流的回车符时才返回数据,所以输出流中要记得使用newLine()方法(跨平台的方法),并且要注意刷新缓冲区,既flush().如果用PrintWriter打印流的话,就会简便很多,可以标记自动刷新,println()自动添加回车符在每行数据末尾处.
{
System.out.println(line);
bufOut.write(line.toUpperCase());
bufOut.newLine();
bufOut.flush();
}
s.close();
ss.close();
}
}
|