import java.io.*;
import java.net.*;
class TransClient
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket("192.168.1.101",8888);
//键盘录入(字符转换流)
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)
{
//发送给服务端
if(line.equals("over"))
break;
bufOut.write(line);
bufOut.newLine();
bufOut.flush();
//接服务端并打印
String str=bufIn.readLine();
System.out.println("Server:"+str);
}
bufr.close();
s.close();
}
}
class TransServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(8888);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"...connecting");
BufferedReader bufIn=
new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bufOut=
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line=null;
while((line=bufIn.readLine())!=null)
{
System.out.println(line);
bufOut.write(line.toUpperCase());
bufOut.newLine();
bufOut.flush();
}
s.close();
ss.close();
}
}
先上代码,这代码没错的,可以正常运行。
这段代码的作用是
客户端读取键盘录入的英文字符串,传到服务端转成大写字符返回来打印在控制台上。
然后我想问的问题是,服务端读取数据转换成大写返回给客户端后。不是执行s.close()关闭Soket流 和ss.close()关闭服务端了么。
为什么实际上是返回给客户端后继续等待接受客户端的数据。
|
|