------- android培训、java培训、期待与您交流! ----------
下面是关于TCP的一个例子:有些注意点
如果觉得太乱的话,可以直接copy到eclipse中执行会更容易理解呦^^
/**
* 要求:建立一个文本转换服务器
* 客户端给服务器发送文本,服务端会将文本转换大写返回客户端
* 而且客户端可以不断的进行文本转换,当客户端输入over时,转换结束
*
* 分析:
* 客户端:
* 既然是操作设备上的数据,那么就会使用io技术,并按照io的操作规律来思考。
* 源:键盘录入
* 目的:网络设备,网络输出流
* 而且操作的是文本数据,可以选择字符流
*
* 步骤:
* 1,建立服务
* 2,获取键盘录入
* 3,将数据发给服务器
* 4,获取服务端返回的大写数据
* 5,结束,关资源
*
* 注意:readLine方法读取一行,是阻塞式方法,读到换行符才会停止
* 如果没有接收到客户端的换行符,
* 服务端会认为还没有结束,会一直等待
* 同理,服务器端反馈回的数据也要有换行符,客户端输入流读到换行符才会结束
*/
//客户端
class TransTextClient{
public static void main(String[] args) throws Exception{
//1,建立Sockcet服务,指定连接主机和端口
Socket s = new Socket("localhost",10001);
//2,定义读取键盘数据的流对象
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
/3,获取Socket流中的输出流。将数据写到流中,通过网络发送给服务端
// BufferedWriter bw =
// new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//上面的这句获取输出流的代码可以用下面这句PrintWriter代替,后面的true代表可以使用println、printf 或format 方法将刷新输出缓冲区
PrintWriter pr = new PrintWriter(s.getOutputStream(),true);
//4,定义一个socket读取流,读取服务器端返回的大写信息
BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line = br.readLine())!= null ){
if("over".equals(line)){
break;
}
//PrintWriter的方法可以将刷新输出缓冲区,所以使用这个方法,可以省略flush方法
pr.println(line);
// bw.write(line);
// //写入一个行分隔符,服务端读到行分隔符,才能判断出客户端输入结束,如果不写这句的话,服务端会一直等待
// bw.newLine();
// //使用缓冲流要记得flush
// bw.flush();
String str = bufin.readLine();
System.out.println("服务端说:"+str);
}
//5,结束,关资源
br.close();
s.close();
}
}
/**
* 服务端:
* 源:socket读取流
* 目的:socket输出流
*
*/
class TransTextServer{
public static void main(String[] args) throws Exception{
//1,建立Sockcet服务,指定连接端口
ServerSocket ss = new ServerSocket(10001);
//2,获取客户端的Socket对象
Socket s = ss.accept();
//3,读取socket读取流中的数据
BufferedReader br =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//4,目的:获取socket输出流中的输出流,将大写数据写入到socket输出流,并发送给客户端
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line =null ;
while((line=br.readLine())!=null){
System.out.println("客户端说:"+line);
bw.write(line.toUpperCase());
bw.newLine();//写入一个行分隔符
bw.flush();
}
//5,关闭资源
s.close();
ss.close();
}
}