Linux布署问题

各位大侠:


         我的问题是用JAVA写了一个Client和Server的Socket数据通讯的项目,Servers端布署在Windows下工作稳定正常的,但是布署在Linux下,就出现数据包延后的问题,困扰一天了,没有解决。情况是这样的,在Linux的服务器端布署好后,Client端发送1,2,3三个包,Server端只收到1,2两个包,当Client端发送下一个包的时候,Linux Server端才收到上一个包,有没有大侠遇到过类似情况呀(Windows下署完全没有问题!),谢谢!


          代码如下:

          Client:

        public boolean sendMessage(SocketMessage message) throws RemoteException {
        message.setUserId("001");
        if (mSocket == null || mSocket.get() == null) {
            return false;
        }
        Socket socket = mSocket.get();
        try {
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            if (!socket.isClosed()) {
                String jMessage = Util.initJsonObject(message).toString() + "\n";
                /// String jMessage = Util.initJsonObject(message).toString();
                writer.write(jMessage);
                writer.flush();
                sleep(1);
                Log.i(TAG, "发送消息:" + jMessage);
                sendTime = System.currentTimeMillis();
                if (message.getType() == Custom.MESSAGE_EVENT) {
                    messageListener.updateMessageList(message);
                }
            } else {
                return false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return true;
    }



      Server:


       @Override
public void run() {
super.run();
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while (isStartServer) {
long interval = System.currentTimeMillis() - lastTime;
if (interval >= (Custom.SOCKET_ACTIVE_TIME * 1000 * 4)) {
System.out.println("客户端发包间隔时间严重延迟,可能已经断开了interval:" + interval);
System.out.println("Custom.SOCKET_ACTIVE_TIME * 1000:" + Custom.SOCKET_ACTIVE_TIME * 1000);
closeSocketClient(this);
break;
}
if (reader.ready()) {
lastTime = System.currentTimeMillis();
System.out.println("收到消息,准备解析:");
String data = reader.readLine();
System.out.println("解析成功了<" + data+">");
SocketMessage from = Util.parseJson(data);
if (userId == null || "".equals(userId))
userId = from.getUserId();
SocketMessage to = new SocketMessage();
if (from.getType() == Custom.MESSAGE_ACTIVE) {
System.out.println("收到心跳包:" + socket.getInetAddress());
to.setType(Custom.MESSAGE_ACTIVE);
to.setFrom(Custom.NAME_SERVER);
to.setTo(Custom.NAME_CLIENT);
to.setMessage("");
to.setUserId(userId);
writer.write(Util.initJsonObject(to).toString() + "\n");
writer.flush();

} else if (from.getType() == Custom.MESSAGE_CLOSE) {
System.out.println("收到断开连接的包:" + socket.getInetAddress());
to.setType(Custom.MESSAGE_CLOSE);
to.setFrom(Custom.NAME_SERVER);
to.setTo(Custom.NAME_CLIENT);
to.setMessage("");
to.setUserId(userId);
writer.write(Util.initJsonObject(to).toString() + "\n");
writer.flush();
closeSocketClient(this);
break;
} else if (from.getType() == Custom.MESSAGE_EVENT) {
System.out.println("收到普通消息包:" + from.getMessage());
}
}
/// Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}

 

           服务端的LOG信息如下,没有出现错误:


          客户端连接成功/192.168.0.167
收到消息,准备解析:
解析成功了<{"message":"Socket-36(0).","type":1,"from":"客户端","to":"服务器","userId":"001"}>
收到普通消息包:Socket-36(0).
收到消息,准备解析:
解析成功了<{"message":"Socket-37(0).","type":1,"from":"客户端","to":"服务器","userId":"001"}>
收到普通消息包:Socket-37(0).
收到消息,准备解析:
解析成功了<{"message":"Socket-38(0).","type":1,"from":"客户端","to":"服务器","userId":"001"}>
收到普通消息包:Socket-38(0).
收到消息,准备解析:
解析成功了<{"message":"Socket-39(0).","type":1,"from":"客户端","to":"服务器","userId":"001"}>
收到普通消息包:Socket-39(0).
收到消息,准备解析:
解析成功了<{"message":"Socket-40(0).","type":1,"from":"客户端","to":"服务器","userId":"001"}>
收到普通消息包:Socket-40(0).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值