新手:TCP协议-客户端-服务端-文本转换问题

来源:互联网 发布:闪电抢购软件 编辑:程序博客网 时间:2024/05/30 20:06

对于我这种刚学习的童鞋,没有项目可言,只好拿练习当个项目玩,像小时候过家家一样,弄得像那么回事。成就感也是油然而生啊。

 需求分析

 客户要求实现自己在客户端输入的字母提交后能够返回大写字母(好雷人的客户,以后叫他阿雷吧,学习的过程总是雷人的)

1 搭建客户端思路:

1 不用多说,TCP客户端,Socket socket  

  字母拿来的啊?自己输入的,源是键盘:System.in

获取的字母如何发送给服务端?用socket的getOutputStream()方法获取它的输出流来实现 

  基本的读写操作

  还要接收服务端处理后给我们的大写字母呢,用什么接?

  用socket的getInputStream()方法来读取服务端

  我发送一行也是发,发送一个也是发,那就来个装饰模式,整个BufferedWriter?

  不行,那个套来套去,太麻烦,不就是想保持字母原类型嘛,用PrintWriter多好

  我每发送一行,服务端给我处理一行,我就接收一行

  关闭资源socket.close();

  定义一个结束标记,想结束的时候就输入结束标记用来关闭客户端

代码如下:

package cn.lan.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class TcpClient {/** *  文本转换客户端 *  思路:1想到客户端Socket *            2字母从哪来?键盘录入,源是键盘:System.in *            3发送出去,目的是哪里?网络,socket,要发送就得有输出流啊,用socket自己的getOutputStream *            4发送数据 *            5接收服务端将字母转换好的文本,源是网络,读取用什么?socket自己的getInputStream,每发送一次接收一次 *            6关闭服务端 * @throws IOException  * @throws UnknownHostException  */public static void main(String[] args) throws UnknownHostException, IOException {// TODO Auto-generated method stubSocket socket =  new Socket("192.168.48.1",10004);BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);BufferedReader bufIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));String line = null;while((line = bufr.readLine())!=null){if("over".equals(line))break;out.println(line);String upperStr = bufIn.readLine();System.out.println(upperStr);}socket.close();}}


2 搭建服务端

  不用多说,TCP服务端,ServerSocket ss

  获取客户端对象,利用 服务端对象的accept()方法

  客户端对象传来的数据,只有客户端自己最清楚,用getInputStream()方法来读取  

 还得完成返回任务呢,是客户端想知道大写是什么样,怎么把处理完的扔回去?

 得了,来是你,走也是你,获取到的客户端对象就受累吧ss.getOutputStream,同样的,给它用个PrintWriter装上

 一顿读写 把客户端发来的字母原小写打印在自身的控制台上,把处理后的 结果返回给客户端

 关闭资源

package cn.lan.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TcpServer {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubServerSocket ss =new ServerSocket(10004);Socket s = ss.accept();String conID = s.getInetAddress().getHostAddress();System.out.println(conID+".....connection");BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);String line = null;while((line = bufr.readLine())!=null){System.out.println(line);out.println(line.toUpperCase());}s.close();ss.close();}}

这个练习主要需要注意的是:

如果不用PrintWriter是否会出现问题,该怎么解决出现的问题

刚开始在这着实犯了迷糊,看看你在这个地方出现过问题没有




原创粉丝点击