[
https://issues.apache.org/jira/browse/DIRMINA-926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13535614#comment-13535614
]
zlh commented on DIRMINA-926:
-----------------------------
Set and Get Iosession Attribute
public void setSocketListMap(int deviceID,IoSession ioSession) {
GlobalObject.log.addNewRec(null, LogType.LOG_SYSTEM_INFO, 0,
-1, " Reg"+deviceID+" IP:"+ioSession.getRemoteAddress());
ioSession.setAttribute("deviceID",deviceID+"");
}
public int getDeviceIDByIoSession(IoSession sc)
{
Object tmpobj = sc.getAttribute("deviceID");
int deviceID = -1;
if (null!=tmpobj)
{
deviceID = Utils.strToInt((String)tmpobj);
}
return deviceID;
}
Receive Data:
public void messageReceived(IoSession session, Object message) throws Exception
{
//super.messageReceived(session, message);
byte[] revByteArr =(byte[])message ;
MsgBlock msgBlock = new MsgBlock(revByteArr,session);
//get deviceID By IoSession
int deviceID =
GlobalObject.getCommLib().getDeviceIDByIoSession(session);
GlobalObject.log.addNewRec(revByteArr , LogType.LOG_SYSTEM_INFO, 0, -1,
"address:"+session.getRemoteAddress());
if (deviceID==-1)
{
GlobalObject.getReceiveQueue().putMsgQueue(msgBlock);
}
else
{
GlobalObject.deviceList[deviceSN].getReceiveQueue().putMsgQueue(msgBlock);
}
}
handle Queue
MsgBlock currentMsgBlock =
GlobalObject.getReceiveQueue().getAndDeleteMsgQueueFirst();
(or
GlobalObject.deviceList[deviceID].getReceiveQueue().getAndDeleteMsgQueueFirst())
GlobalObject.deviceList[deviceID].getProtocolLib().analyticData(currentMsgBlock
);
handle Data
received login code;
xxx.xxxx.setSocketListMap(deviceID, ioSession);
this.deviceID = ioSession;
send Data
public boolean sendData(byte[] byteArr, int len, int deviceID,String
remark) {
IoSession session = GlobalObject.deviceList[deviceID].getIoSession();
IoBuffer sendbuffer = Utils.byteToIoBuffer(byteArr, len);
session.write(sendbuffer);
}
This is a simplified code
No other code is associated.
Do you doubt my code problem?
Why is my server is running on the LAN is no problem。
Only when there is GPRS Devices when it is wrong
> IoSession IP Error when Socket Server Communicate With Microcomputer In LAN
> and Internet.
> ------------------------------------------------------------------------------------------
>
> Key: DIRMINA-926
> URL: https://issues.apache.org/jira/browse/DIRMINA-926
> Project: MINA
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.0.7
> Environment: windows XP ,Eclipse 1.4.2
> Reporter: zlh
>
> A server in the LAN,Every Single Chip Microcomputer Connected by a switch.
> My Socket Server Is Runing In The Server,I Can Communicate With Every Single
> Chip Microcomputer
> Now,I Want My Socket Server Can Receive Data From Internet(By GPRS). a adsl
> modem is connected to the
> switch. the Server Can Connect to internet use PPPoE dial, At first, The
> Socket Server also
> can Communicate with every Single Chip Microcomputer(Include LAN and
> Internet). After a period of
> time,a Error is Appear,
> Some Data Come from Internet But the IOsession is A LAN IP address.
> Change a older Verion Mina(1.1.7),But the Same.
> My mina is 2.0.7.
> this is some code:
> public void messageReceived(IoSession session, Object message) throws
> Exception
> {
> byte[] revByteArr =(byte[])message ;
> GlobalObject.log.addNewRec(revByteArr , LogType.LOG_SYSTEM_INFO, 0,
> -1,
> "address:"+session.getRemoteAddress());
> }
>
> 113484 INFO 2012-12-11 08:38:43 LowerComputerCommRec
> address:/211.140.5.116:50937 : 68 1c 06
> 00 04 00 0b 01 03 00 0d 00 00 00 00 1d 08 00 01 00 00 00 00 00 07 00 00 02 00
> 00
> 117531 INFO 2012-12-11 08:38:47 LowerComputerCommRec
> address:/211.140.5.116:50937 : 68 20 08
> 00 04 00 84 01
> 131500 INFO 2012-12-11 08:39:01 LowerComputerCommRec
> address:/192.168.1.226:9000 : 68 0e 0a
> 00 04 00 64 01 0a 00 0d 00 00 00 00 14
> Is it a MINA bug??
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira