Topic: 在写一个通讯程序时居然遇到这样的问题,活不下去了 |
Print this page |
1.在写一个通讯程序时居然遇到这样的问题,活不下去了 | Copy to clipboard |
Posted by: debugger Posted on: 2003-10-24 18:18 我正在写一个通讯程序,分为客户端和服务器两部分,客户端输出采用以下方式实现: out = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream( clientSocket.getOutputStream()), "GB2312")); 服务器端读取采用以下方式实现: BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket. getInputStream(), "GB2312")); 通讯格式固定:1.客户端用out.println()发出指令 2.客户端用out.println()发出与指令相对应的参数。 3.out.flush(); 服务器端使用in.readLine();读取客户端发来的指令,用一大堆if() else if()判断收到的是什么指令,进入相应的程序块。在对应的程序块中再用readLine读取参数,并进行相应处理。 原理应该很简单,实现的时候却遇到了巨大的痛苦。我debug程序的时候发现,所有的if判断条件总是不符合。譬如,从客户端收到"login"指令,却不能进入if(strCmd == "login") {}进行处理。我甚至将从客户端收到的指令转换为byte[],将服务器端的常量"login"也转为byte[]进行比较,发现完全是一样的,可是为什么条件表达式就是不成立呢? 各位快帮帮我吧,我都要疯了。 |
2.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: debugger Posted on: 2003-10-24 18:23 彻底疯了,我把输入输出中的"GB2312"统统去掉了,还是一样的。 唉,以我的认知水平,看来没法解决这个问题了,好高高手,你在哪里? |
3.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: floater Posted on: 2003-10-24 22:13 StrCmd.equals("login") |
4.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: hwx Posted on: 2003-10-24 22:33 呵呵,原来问题在这里。 有时候人一胡涂,很容易犯这种错误呢。 |
5.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: floater] | Copy to clipboard |
Posted by: helloworld Posted on: 2003-10-24 23:14 我也遇到过,跟踪输出明明是一样的,可是用==就是不行, 只好最后用equals() |
6.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: hwx Posted on: 2003-10-24 23:47 String比较不能用==的,那是两个对象引用之间的比较, 要比较String的内容,用equals才保险。 |
7.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: hwx] | Copy to clipboard |
Posted by: why Posted on: 2003-10-25 02:31 hwx wrote: not only 用equals才保险, but MUST 用equals we aren't using JavaScript. |
8.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: yeehya Posted on: 2003-10-26 19:30 估计都是先学的c。 大家都说java和c 很像,好上手; 但是也会很害人的。 |
9.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: yeehya] | Copy to clipboard |
Posted by: why Posted on: 2003-10-26 22:11 yeehya wrote: How's it related to 先学的C? There's no String class in C, and one has to use strcmp(sq, s2) or compare char by char. |
10.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: why] | Copy to clipboard |
Posted by: helloworld Posted on: 2003-10-26 22:16 呵呵,可以研究一下String的intern() 方法的用法........ 使用intern()方法返回的所有字符串都可以通过使用==来进得比较...速度快,省内存. |
11.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: debugger Posted on: 2003-10-27 09:01 谢谢各位的指点,确实是个小问题。主要原因是我看书一目十行,在书上看String类的用法时,只看了例子程序,将程序中的==误认为是比较两个字符串内容的方法。有了各位的指点,我又回去看看书,发现书上是这样写的: 操作符==用于比较引用和比较基本数据类型时具有不同功能。当基本数据类型用==来比较时,如果两个值相同,结果就是true。当引用作==比较时,如果两个引用都指向内存中的同一个对象,则结果为true。为了比较对象实际内容(或状态信息)的相等性,必须激活特定方法(如equals)。 看来,一目十行害死人啊。:)不过,现在总算澄清了这个概念,也算长了知识。谢谢各位的解答。 |
12.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: helloworld] | Copy to clipboard |
Posted by: Biubiu Posted on: 2003-10-27 12:22 helloworld wrote: 会省内存吗?调用intern的String都会被加到pool里去,这些String都不可能被垃圾收集的,为什么会省内存呢?如果String太多,只会让memory高居不下吧。 |
13.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: Biubiu] | Copy to clipboard |
Posted by: nothing Posted on: 2003-10-27 12:29 指的是String不多,但比较的次数多.. |
14.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: nothing] | Copy to clipboard |
Posted by: Biubiu Posted on: 2003-10-28 12:24 nothing wrote: 应该是对经常比较的String用这种方法吧,其它的就免了。 |
15.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: cyz99 Posted on: 2003-10-28 13:37 呵呵,这种错误是很低级的错误哦,我现在都不会范这种错了! |
16.Re:在写一个通讯程序时居然遇到这样的问题,活不下去了 [Re: debugger] | Copy to clipboard |
Posted by: floater Posted on: 2003-10-29 01:32 You never know, I am still making stupid mistakes, nature of the beast! |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |