运行一java客户端程序, 与服务器连接,建立套接字,构建输入输出流, 向输出流中写入数据, 当运行到这地方时主板发出报警声,有时2短声,有时1长2短或1长3短。执行的代码片段如下: public int sendLoginPacketData(Socket sk , HostInfor hsInf ){
/*
DataOutputStream out = null ;
DataInputStream in = null ;
byte[] data = new byte[COMMON.MAX_DATALEN ] ;
byte[] headdata = new byte[ COMMON.MAX_DATAHEADLEN] ;
byte[] recvdata = new byte[COMMON.MAX_DATALEN ] ;
int datalen = 0 , m , n , contlen ;
DataPacket loginDataPacket = new DataPacket() ;
DataPacket loginRspDataPacket = new DataPacket() ;
Log lg = Log.getInstance() ;
try{
if( hsInf.getUserClient() != null )
loginDataPacket.setContent( hsInf.getUserClient().getUserNameMd5() + hsInf.getUserClient().getPasswordMd5() ) ;
else
loginDataPacket.setContent("no") ;
loginDataPacket.composeData( COMMON.CMD_LOGIN ) ;
loginDataPacket.setCmd( COMMON.CMD_LOGIN ) ;
out = new DataOutputStream( sk.getOutputStream() ) ;
in = new DataInputStream( sk.getInputStream() ) ;
datalen = loginDataPacket.getSendData( data) ;
if( datalen < COMMON.MAX_DATAHEADLEN )
return -1 ;
out.write(data, 0 , datalen) ;
n = in.read( headdata , 0 , COMMON.MAX_DATAHEADLEN ) ;
m = n ;
while( m < COMMON.MAX_DATAHEADLEN && n != -1 ){
n = in.read( headdata , m , COMMON.MAX_DATAHEADLEN - m ) ;
m = m + n ;
}
loginRspDataPacket.setDataHead( headdata , 0 , COMMON.MAX_DATAHEADLEN ) ;
loginRspDataPacket.parseDataHead() ;
contlen = loginRspDataPacket.getDataLen() ;
m = 0 ;
n = 0 ;
n = in.read(recvdata , 0 , contlen ) ;
m = n ;
while( m < contlen && m < ( COMMON.MAX_DATALEN - COMMON.MAX_DATAHEADLEN) && n != -1 ){
n = in.read(recvdata , m , contlen - m ) ;
m = m + n ;
}
loginRspDataPacket.setDataContent( recvdata , 0 , contlen ) ;
System.out.println( loginRspDataPacket.toString() );
if( loginRspDataPacket.getCmd() == COMMON.CMD_REP_LOGIN && loginRspDataPacket.getContent().equals( COMMON.CMD_RP_VALID) )
return 0 ;
else
return -1 ;
}catch( Exception e ){
lg.writeLog( COMMON.getCurTimeEx(0) + "向服务器发送请求数据包产生异常" + e, COMMON.LOG_LEVEL_3) ;
return -1 ;
}*/
return 0 ;
}
/*
DataOutputStream out = null ;
DataInputStream in = null ;
byte[] data = new byte[COMMON.MAX_DATALEN ] ;
byte[] headdata = new byte[ COMMON.MAX_DATAHEADLEN] ;
byte[] recvdata = new byte[COMMON.MAX_DATALEN ] ;
int datalen = 0 , m , n , contlen ;
DataPacket loginDataPacket = new DataPacket() ;
DataPacket loginRspDataPacket = new DataPacket() ;
Log lg = Log.getInstance() ;
try{
if( hsInf.getUserClient() != null )
loginDataPacket.setContent( hsInf.getUserClient().getUserNameMd5() + hsInf.getUserClient().getPasswordMd5() ) ;
else
loginDataPacket.setContent("no") ;
loginDataPacket.composeData( COMMON.CMD_LOGIN ) ;
loginDataPacket.setCmd( COMMON.CMD_LOGIN ) ;
out = new DataOutputStream( sk.getOutputStream() ) ;
in = new DataInputStream( sk.getInputStream() ) ;
datalen = loginDataPacket.getSendData( data) ;
if( datalen < COMMON.MAX_DATAHEADLEN )
return -1 ;
out.write(data, 0 , datalen) ;
n = in.read( headdata , 0 , COMMON.MAX_DATAHEADLEN ) ;
m = n ;
while( m < COMMON.MAX_DATAHEADLEN && n != -1 ){
n = in.read( headdata , m , COMMON.MAX_DATAHEADLEN - m ) ;
m = m + n ;
}
loginRspDataPacket.setDataHead( headdata , 0 , COMMON.MAX_DATAHEADLEN ) ;
loginRspDataPacket.parseDataHead() ;
contlen = loginRspDataPacket.getDataLen() ;
m = 0 ;
n = 0 ;
n = in.read(recvdata , 0 , contlen ) ;
m = n ;
while( m < contlen && m < ( COMMON.MAX_DATALEN - COMMON.MAX_DATAHEADLEN) && n != -1 ){
n = in.read(recvdata , m , contlen - m ) ;
m = m + n ;
}
loginRspDataPacket.setDataContent( recvdata , 0 , contlen ) ;
System.out.println( loginRspDataPacket.toString() );
if( loginRspDataPacket.getCmd() == COMMON.CMD_REP_LOGIN && loginRspDataPacket.getContent().equals( COMMON.CMD_RP_VALID) )
return 0 ;
else
return -1 ;
}catch( Exception e ){
lg.writeLog( COMMON.getCurTimeEx(0) + "向服务器发送请求数据包产生异常" + e, COMMON.LOG_LEVEL_3) ;
return -1 ;
}*/
return 0 ;
}
解决方案 »
- jsp页面 hidden字段安全问题!
- 实现AbstractCollection出现空指针异常
- 新手求教!大侠们伸下援手吧!!!关于类与对象的问题,是在事件方法中一般类的对象创建和方法使用。。。
- 两个vector对比,删除重复元素???
- ThreadPoolExecutor 线程池如何设置里面线程的最长执行时间?
- 菜鸟提问: 在JAVA中判断一JTextField 的输入值有几种办法??谢谢!!
- 出200分(或更多),就non-static inner class请教java高手
- 我用所有的分数向你拜师,你愿意吗?
- 在java中我如何得到10-30之间的随机数啊 ,最好能举一例,一定给分儿
- 关于货币类型,大家请看
- Swing界面设计
- 逻辑面试题,有空进来看看
解释一下这段代码的含义:1 参数 sk:已经建立到服务器端的套接字连接。
hsInf: 主机信息对象, 包含要连接到服务器的名称、ip地址、端口号等
2 先构建一个数据包loginDataPacket ,设置数据包内容。3 把数据包数据写到输出流中 ,即:out.write(data, 0 , datalen) ; 而正当运行到这一句时主板报警,注释掉后正常。更奇怪的是另外一个方法B, 其中向输出流写数据和从输入流中读取数据的代码块和这个方法是完全一样的,而方法B运行正常,但是当设置数据包的内容为“1111111”时方法B也导致主板报警。 困惑中...找了两天了还没结果,期盼高手,在线等...
public static void main(String[] args){
for(int i=0;i<10;i++){
System.out.println((char)7);
}
}}运行一下这个,试试? 呵呵
万分感激...,等着接分啊~~