紧急求救:SOCKET程序的问题
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




