TCP/UDP 的数组传输问题
昨天写个程序,需要通过TCP传输一个2维数组,服务端却接收不到客户端发出的数据,请问论坛各位元老数组的传输是不是不同于一般数据的呢?是否需要做缓冲呢? TCP传输不能传输数组,只能发送二进制数据或字符串可以在发送端将数组转换成字符串发送,在接收端将字符串还原成数组 TCP传输不能传输数组,只能发送二进制数据或字符串
可以在发送端将数组转换成字符串发送,在接收端将字符串还原成数组
又学到东西了 回复 2# C.L
嗯,谢谢您的回答 回复 3# liufenglg
我们共同进步 回复 2# C.L
兄弟是否可以给出个转换函数呢? #Include <Array.au3>
_ArrayToString(Const ByRef $avArray [, $sDelim = "|" [, $iStart = 0 [, $iEnd = 0]]])谢谢各位关注 未考虑数组过大的情况,仅支持1维数组。TCP/IP传输自行处理。#include <array.au3>
Local $Array
For $i=0 To 99
$Array[$i]="string"&Random($i+1,10000,1)
Next
_ArrayDisplay($Array)
$Bin=Arr2Bin($Array)
MsgBox(0,0,$Bin)
$Re=Bin2Arr($Bin)
_ArrayDisplay($Re)
Func Arr2Bin($Arr)
Local $Str
If IsArray($Arr) Then
$Str=_ArrayToString($Arr,"^,")
$Bin=StringToBinary($Str)
Return $Bin
Else
Return SetError(0)
EndIf
EndFunc
Func Bin2Arr($String)
Local $Arr,$Str
If IsBinary($String) Then
$Str=BinaryToString($String)
$Arr=StringSplit($Str,"^,",1)
_ArrayDelete($Arr,0)
Return $Arr
Else
Return SetError(0)
EndIf
EndFunc 回复 8# 3mile
谢谢,我会自己把它扩展的了 本帖最后由 C.L 于 2010-8-30 13:32 编辑
回复 7# cutyourchicken
_ArrayToString()函数只能转换1维数组吧?
好像你要转换的是2维数组,给你写个二维数组转换和还原的函数,直接转换成二进制数据,方便TCP传输:
#include<array.au3>
Dim $a = [,]
$sArray = _Array2DToString ($a)
MsgBox (0,'二维数组二进制数据,$sArray)
$array = _StringToArray2D ($sArray)
_ArrayDisplay ($array,'还原二维数组')
Func _Array2DToString ($array)
Local $array1,$arrya2,$out = ""
$array1 = UBound($array,1)
$array2 = UBound($array,2)
$out = $array1&"|"&$array2
For $i=0 To $array1-1
For $j=0 To $array2-1
$out &="|" & $array[$i][$j]
Next
Next
Return StringToBinary ($out,4)
EndFunc
Func _StringToArray2D($binData)
Local $temp
$string = BinaryToString ($binData,4)
$temp = StringSplit ($string,"|")
Local $array2d[$temp][$temp]
$k = 3
For $i=0 To $temp-1
For $j=0 To $temp-1
$array2d [$i][$j] = $temp [$k]
$k += 1
Next
Next
Return $array2d
EndFunc
{:face (319):}回复 10# C.L
我自己已经搞定了,不过还是要感谢你
页:
[1]