客户端发送的代码:
var
StreamLen : Integer;
XMLArray : Array Of Byte;
begin
StreamLen := 333;
SetLength(XMLArray, 12);
XMLArray[0] := StreamLen;
XMLArray[1] := StreamLen shr 8;
XMLArray[2] := StreamLen shr 16;
XMLArray[3] := StreamLen shr 24; XMLArray[8 + 0] := 1;
XMLArray[8 + 1] := 1 shr 8;
XMLArray[8 + 2] := 1 shr 16;
XMLArray[8 + 3] := 1 shr 24; mySocket := TTCPClient.Create(nil);
mySocket.RemotePort := '8000';
mySocket.RemoteHost := '127.0.0.1';
mySocket.BlockMode := bmNonBlocking;
mySocket.Active := True;
mySocket.SendBuf(XMLArray, 12);
end;
调试状态下看到XMLArray为{77,1,0,0,0,0,0,1,0,0,0,0}服务器端接收代码:
socket = new ServerSocket(port);
while (!isClose)
{
try
{
client = socket.accept();
if (client!=null){
new Client(client); <----进入处理线程
}
}catch(Exception ex){}
}<- 处理线程 ->
byte[] head = new byte[12];
try{
//设置3分钟超时
socket.setSoTimeout(180000); DataInputStream in = new DataInputStream(socket.getInputStream());
while (isRun)
{
int length = 0;
try{
length = in.read(head, 0, 12);
}catch(SocketTimeoutException ex){
break;
}catch(SocketException ex){
break;
} if (length!= 12) <--- length确实等于12,
{ <--- 但head的值为{76,47,-48,0,12,42,-48,0,24,55,-48,0}
break;
}
}
}catch(Exception ex){}
请问是什么原因倒致接收到的数据与发送数据不一符呢?
var
StreamLen : Integer;
XMLArray : Array Of Byte;
begin
StreamLen := 333;
SetLength(XMLArray, 12);
XMLArray[0] := StreamLen;
XMLArray[1] := StreamLen shr 8;
XMLArray[2] := StreamLen shr 16;
XMLArray[3] := StreamLen shr 24; XMLArray[8 + 0] := 1;
XMLArray[8 + 1] := 1 shr 8;
XMLArray[8 + 2] := 1 shr 16;
XMLArray[8 + 3] := 1 shr 24; mySocket := TTCPClient.Create(nil);
mySocket.RemotePort := '8000';
mySocket.RemoteHost := '127.0.0.1';
mySocket.BlockMode := bmNonBlocking;
mySocket.Active := True;
mySocket.SendBuf(XMLArray, 12);
end;
调试状态下看到XMLArray为{77,1,0,0,0,0,0,1,0,0,0,0}服务器端接收代码:
socket = new ServerSocket(port);
while (!isClose)
{
try
{
client = socket.accept();
if (client!=null){
new Client(client); <----进入处理线程
}
}catch(Exception ex){}
}<- 处理线程 ->
byte[] head = new byte[12];
try{
//设置3分钟超时
socket.setSoTimeout(180000); DataInputStream in = new DataInputStream(socket.getInputStream());
while (isRun)
{
int length = 0;
try{
length = in.read(head, 0, 12);
}catch(SocketTimeoutException ex){
break;
}catch(SocketException ex){
break;
} if (length!= 12) <--- length确实等于12,
{ <--- 但head的值为{76,47,-48,0,12,42,-48,0,24,55,-48,0}
break;
}
}
}catch(Exception ex){}
请问是什么原因倒致接收到的数据与发送数据不一符呢?
解决办法不能定义成XMLArray : Array Of Byte;
应该定义成:XMLArray : Array[0..11] Of Byte;
你定义成XMLArray : Array Of Byte;
系统只是动态分配物理地址空间给变量XMLArray。XMLArray是相对内存物理地址一个指针。
你用sendtext动作可以这样做
Byte数组要看最长可能会多长,你就定义多长,这一点是没办法的。
这个跟移动根联通的短信网关协议基本上是一致的。
我不知道你的程序是做什么用的
我想知道
服务器端,数据接收,变量你是怎样定义的?
//先取包头,将包头的变量转换成整型长度
int size = Tools.byteToInt(head);
byte[] body = new byte[size];try{
length = in.read(body, 0, size);
}catch(SocketTimeoutException ex){
Logs.println("读取数据超时!服务器自动关闭连接[" + socket.getLocalPort() + "]!!");
break;
}catch(SocketException ex){
break;
}if (length!= size)
{
break;
}
Logs.println("[" + tt.getName() + "]收到从 " +
socket.getRemoteSocketAddress().toString() +
" 发来的报文:\n" + Tools.byteArrayToString(body));
try
{
//ShortMessage 是自定义的XML类,构造一个XML包
msg = new XMLMessage(body); //通过接口转换到另一个线程去处理
msgRecvIf.Recv(socket, msg);
}catch (Exception ex){
Logs.printError(ex,"监听端口XML数据失败:" + Tools.byteArrayToString(body));
SocketClient.sendReportMsg(socket,null,"-999",null);
break;
}
都无法连接上了,我不知道老兄你这样写是连接上去了?有人说ttcpclient有问题,不知道大家在需要nonblock mode的时候都用什么控件