Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fmp_vip
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhenfei.zhang
fmp_vip
Commits
74bc5ec7
Commit
74bc5ec7
authored
Nov 27, 2017
by
NitefullWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 接收数据时,如果有消息头,则根据消息头内指定长度循环接收。
parent
89c1c338
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
8 deletions
+46
-8
fmvip/fmp_vip_server.cpp
+45
-7
version.h
+1
-1
No files found.
fmvip/fmp_vip_server.cpp
View file @
74bc5ec7
...
...
@@ -55,17 +55,55 @@ void FMPVipServer::onDisconnected()
void
FMPVipServer
::
onReadyRead
()
{
QByteArray
recvData
=
socket
->
readAll
();
QByteArray
recvData
;
int
needLen
=
-
1
,
totalLen
=
0
,
dataLen
=
0
;
if
(
isNeedSocketHeader
)
{
FMSOCKEHEADER
header
=
{
0
};
memcpy
(
&
header
,
recvData
.
data
(),
sizeof
(
FMSOCKEHEADER
));
if
(
header
.
flag
!=
FMSOCKFLAG
)
{
FMP_WARN
()
<<
"Incompatible protocol."
;
return
;
while
(
needLen
==
-
1
||
totalLen
<
needLen
)
{
// 如果不是第一次接收数据,则阻塞
if
(
totalLen
>
0
)
{
bool
isNext
=
socket
->
waitForReadyRead
(
30
*
1000
);
if
(
!
isNext
)
{
FMP_ERROR
()
<<
"Wait recv data time out. Recved length: "
<<
totalLen
<<
" need length: "
<<
needLen
<<
" Recved data: "
<<
recvData
;
socket
->
close
();
socket
->
deleteLater
();
socket
=
nullptr
;
return
;
}
}
QByteArray
tempData
=
socket
->
readAll
();
totalLen
+=
tempData
.
size
();
recvData
.
append
(
tempData
);
if
(
isNeedSocketHeader
)
{
// 消息头接收完成
if
(
needLen
==
-
1
&&
totalLen
>=
sizeof
(
FMSOCKEHEADER
))
{
FMSOCKEHEADER
header
=
{
0
};
memcpy
(
&
header
,
recvData
.
data
(),
sizeof
(
FMSOCKEHEADER
));
if
(
header
.
flag
!=
FMSOCKFLAG
)
{
FMP_ERROR
()
<<
"Incompatible protocol. Recved data: "
<<
recvData
;
socket
->
close
();
socket
->
deleteLater
();
socket
=
nullptr
;
return
;
}
else
{
dataLen
=
header
.
len
;
needLen
=
header
.
len
+
sizeof
(
FMSOCKEHEADER
);
}
}
}
else
{
dataLen
=
tempData
.
size
();
needLen
=
tempData
.
size
();
}
}
if
(
isNeedSocketHeader
)
{
recvData
=
recvData
.
mid
(
sizeof
(
FMSOCKEHEADER
));
}
if
(
totalLen
>
needLen
)
{
FMP_WARN
()
<<
"Recv total length: "
<<
totalLen
<<
" need length: "
<<
needLen
;
recvData
=
recvData
.
mid
(
0
,
dataLen
);
}
QByteArray
rspData
;
dispatcher
->
doTask
(
recvData
,
rspData
);
...
...
version.h
View file @
74bc5ec7
...
...
@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 2
7
#define VER_BUILD 2
8
//! Convert version numbers to string
#define _STR(S) #S
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment