A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘张朋 中级黑马   /  2013-8-28 19:36  /  1957 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘张朋 于 2013-9-3 11:10 编辑

我在练习tcp传输,将客户端输入的字符串由服务端转换成大写返回给客户端时发现:如果把输入法切换到汉字输入法后,读取到的键盘录入的根本就不是自己输入的字符串,而且输了几次后就不能在输入了,这是怎么回事呢?

下面是显示结果:下面的图不知道怎么放大,附件里面有一份


客户端源码:
package transtext;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TransClient {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Socket s = null;
                BufferedReader bufin = null;
                try {
                        s = new Socket(InetAddress.getByName("lzp"),10003);
                        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                        bufin = new BufferedReader(new InputStreamReader(System.in));
                        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
                        
                        String line = null;
                        while((line=bufin.readLine())!=null){
                                System.out.println(line);//汉字输入法是这里读到的不是输入的字符串
                                if(line.equals("over"))
                                        break;
                                out.write(line);
                                out.newLine();
                                out.flush();
                                
                                String serverReturn = in.readLine();
                                System.out.println(serverReturn);
                        }
                } catch (UnknownHostException e1) {
                        e1.printStackTrace();
                }catch (IOException e) {
                        e.printStackTrace();
                }finally{
                        
                                try {
                                        if(bufin!=null)                bufin.close();
                                        if(s!=null)                s.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                }

        }

}

错误结果.png (31.27 KB, 下载次数: 14)

运行结果

运行结果

10 个回复

倒序浏览
这里输不了汉子
回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报

为什么呢?是eclipse缓存吗
回复 使用道具 举报
黄文伯 发表于 2013-8-28 21:47
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~ ...

哥啊,你就给我解答一下呗,我是真心没懂啊,
回复 使用道具 举报
亲。我帮你看看,你给我服务端
回复 使用道具 举报
潘才新 发表于 2013-8-29 01:23
亲。我帮你看看,你给我服务端

哥们,不好意思 啊,昨晚睡得有点早,

package transtext;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TransServer {

        /**
         * @param args
         */
        public static void main(String[] args) {
               
                ServerSocket ss = null;
                Socket s = null;
                try{
                        ss = new ServerSocket(10003);
                        s = ss.accept();
                        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
                        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                        String line = null;
                        while((line=in.readLine())!=null){
                                System.out.println(line);
                                out.write(line.toUpperCase());
                                out.newLine();
                                out.flush();
                        }
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        try {
                                if(s!=null)                s.close();
                                if(ss!=null)                ss.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }

}


回复 使用道具 举报
哥们儿,你这结果好像没什么问题啊,我用的QQ拼音输入法,中途切换好几次都可以的,结果在附件的图片中,你看下

itheima.jpg (111.46 KB, 下载次数: 5)

itheima.jpg
回复 使用道具 举报
第一印象 发表于 2013-8-29 09:16
哥们儿,你这结果好像没什么问题啊,我用的QQ拼音输入法,中途切换好几次都可以的,结果在附件的图片中,你 ...

你是直接用的我的代码吗?郁闷哦,难道是我的输入法不好用,我直接输“我是中国人”,当时第二个是键盘读入的汉字前面就带字母了,好像是readLine方法把我敲得字母一起读了,不知道是不是敲完字母按空格的时候出来什么问题,如果直接复制粘贴而不用键盘敲入的话就没问题,而且敲了两次后就不能继续敲了
回复 使用道具 举报
刘张朋 发表于 2013-8-29 10:06
你是直接用的我的代码吗?郁闷哦,难道是我的输入法不好用,我直接输“我是中国人”,当时第二个是键盘读 ...

是用的你的代码
回复 使用道具 举报

那可能就是输入法在敲空格的时候出问题了,不过代码没问题就行,
谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马