CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

紧急求救:SOCKET程序的问题

楼主oarsman(翔龙)2005-04-01 16:53:38 在 Java / J2SE / 基础类 提问

byte[]   frmClt=null;   //做过长度处理后的接收消息  
                  byte[]   buffer=new   byte[1024];   //消息缓冲区  
                  int   read;   //获取消息读入消息的长度  
                  int   i;//循环控制变量  
                  Socket   socket=null;  
                  InputStream   sin=null;  
                  OutputStream   sout=null;  
   
                  try  
                  {  
                          System.out.println("正在连接HOST:");  
                          socket=new   Socket("10.1.7.188",9001);  
                          sin=socket.getInputStream();  
                          sout=socket.getOutputStream();  
                          System.out.println("连接HOST成功,发送消息");  
                          sout.write("just   a   test".getBytes());  
                          read=sin.read(buffer);  
                          frmClt=new   byte[read];  
                          for(i=0;i<read;i++)  
                          {  
                                  frmClt[i]=buffer[i];  
                          }  
                          System.out.println("接收到HOST响应消息....");  
                          System.out.print("["+frmClt+"]");  
                  }  
                  catch(Exception   e)  
                  {  
   
                          System.out.println("连接HOST失败.....");  
                          System.exit(0);  
                  }  
   
  上面这段程序是我写的socket客户端的程序,我同时也写了一个服务器端的程序,可是我发现,每次执行sout.write("just   a   test".getBytes());之后,我的服务器程序还没有来得及返回一个结果,客户端程序就已经能够通过read=sin.read(buffer);读取到一个返回结果,但是这个结果根本不是正确的返回结果,我找了好长时间都没有找到原因!这是为什么呢?很着急,希望大家救救我! 问题点数:100、回复次数:15Top

1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-01 16:59:59 得分 20

try  
                  {  
  while(true)   {  
                          System.out.println("正在连接HOST:");  
                          socket=new   Socket("10.1.7.188",9001);  
                          sin=socket.getInputStream();  
                          sout=socket.getOutputStream();  
                          System.out.println("连接HOST成功,发送消息");  
                          sout.write("just   a   test".getBytes());  
                          read=sin.read(buffer);  
                          frmClt=new   byte[read];  
                          for(i=0;i<read;i++)  
                          {  
                                  frmClt[i]=buffer[i];  
                          }  
                          System.out.println("接收到HOST响应消息....");  
                          System.out.print("["+frmClt+"]");  
        }  
  }  
   
  Top

2 楼oarsman(翔龙)回复于 2005-04-01 17:12:31 得分 0

问题是服务器还没有响应,就能读到结果了!这个结果是我不需要的,这个问题怎么办?Top

3 楼takecare(大厅)回复于 2005-04-01 17:13:25 得分 35

你用的是NIO的socket?  
  怎么会不阻塞的呢?Top

4 楼takecare(大厅)回复于 2005-04-01 17:15:46 得分 0

如果用的不是NIO,那么你的服务器程序肯定是有问题的。Top

5 楼oarsman(翔龙)回复于 2005-04-01 17:38:36 得分 0

NIO   是什么?Top

6 楼oarsman(翔龙)回复于 2005-04-01 17:41:53 得分 0

我知道NIO是什么了!但是还是不明白你的意思!Top

7 楼takecare(大厅)回复于 2005-04-01 18:06:29 得分 0

既然不是NIO的话,为什么在一个服务处理过程上面会出现服务器随意给客户机发消息呢?这是应该不是你期望的吧?  
  所以常规的做法就是,接收到一个客户机请求就开一个独立的线程为其服务Top

8 楼oarsman(翔龙)回复于 2005-04-02 10:02:27 得分 0

现在的问题不是出在服务器端!而是客户端,服务器端我单步跟踪了一切正常,但是客户端在服务器没有发送消息前,就能收到一个消息!现在的问题是在这里!Top

9 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-04-02 10:08:35 得分 35

收到的是什么消息??先搞清楚消息哪来的,如果服务端没发送的话Top

10 楼oarsman(翔龙)回复于 2005-04-02 10:16:28 得分 0

收到的消息是这样的一串代码   3F   3F   3F   3F   2E   2E   2E   2E   2E   2E   0D   然后下一个消息才是我所希望的服务器的响应!我也不知道这串代码是谁发的!Top

11 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-04-02 10:25:04 得分 0

那应该是协议编码吧?  
  我有个解决方案,你在服务端发送的消息上加上特殊的标记  
  然后read后进行判断,提取你想要的消息Top

12 楼oarsman(翔龙)回复于 2005-04-02 10:28:37 得分 0

哦!这个方法不太好办啊!服务器端的程序是客户的,我不能随便动啊!Top

13 楼xiangqianchong(向前冲)回复于 2005-04-02 10:39:54 得分 10

只能顶Top

14 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-04-02 10:50:54 得分 0

试下这样会不会不同      
    try  
                  {  
                          System.out.println("正在连接HOST:");  
                          socket=new   Socket("10.1.7.188",9001);  
                          sin=socket.getInputStream();  
                          sout=socket.getOutputStream();  
                          System.out.println("连接HOST成功,发送消息");  
                          sout.write("just   a   test".getBytes());  
                           
                  }  
                  catch(Exception   e)  
                  {  
   
                          System.out.println("连接HOST失败.....");  
                          System.exit(0);  
                  }  
                    try{  
                            read=sin.read(buffer);  
                          frmClt=new   byte[read];  
                          for(i=0;i<read;i++)  
                          {  
                                  frmClt[i]=buffer[i];  
                          }  
                          System.out.println("接收到HOST响应消息....");  
                          System.out.print("["+frmClt+"]");  
                      }  
                    catch(Exception)  
                  {  
                    }Top

15 楼oarsman(翔龙)回复于 2005-04-02 11:08:07 得分 0

呵呵!多谢大家的帮忙!我已经找到了问题了!是他们的服务器程序写的有问题!唉!白费了我半天劲!找他们算账去了!多谢大家了!Top

相关问题

  • 紧急:有关SOCKET程序如何将数据打包?
  • 紧急求救:VC程序员请进....
  • 紧急求助!关于编译程序!!
  • 关于 VB 外接程序,紧急!!!!!!!!
  • 紧急招聘PB程序员(成都)
  • 紧急问题(程序发布)
  • 程序中出错,紧急求助!
  • SOCKET聊天室程序求助(有源程序)100分
  • 一段有关Socket的VC小程序?
  • 关于Socket通讯程序(急)

关键词

  • socket
  • 消息
  • 连接
  • null
  • sout
  • frmclt
  • 长度
  • sin
  • read
  • 连接host

得分解答快速导航

  • 帖主:oarsman
  • jFresH_MaN
  • takecare
  • killme2008
  • xiangqianchong

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo