找回密码
 加入
搜索
查看: 4683|回复: 10

[网络通信] TCP/UDP 的数组传输问题

  [复制链接]
发表于 2010-8-30 09:17:14 | 显示全部楼层 |阅读模式
昨天写个程序,需要通过TCP传输一个2维数组,服务端却接收不到客户端发出的数据,请问论坛各位元老数组的传输是不是不同于一般数据的呢?是否需要做缓冲呢?
发表于 2010-8-30 09:46:45 | 显示全部楼层
TCP传输不能传输数组,只能发送二进制数据或字符串
可以在发送端将数组转换成字符串发送,在接收端将字符串还原成数组

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-30 09:48:27 | 显示全部楼层
TCP传输不能传输数组,只能发送二进制数据或字符串
可以在发送端将数组转换成字符串发送,在接收端将字符串还原成数组
又学到东西了
 楼主| 发表于 2010-8-30 10:56:33 | 显示全部楼层
回复 2# C.L


    嗯,谢谢您的回答
 楼主| 发表于 2010-8-30 10:56:53 | 显示全部楼层
回复 3# liufenglg


    我们共同进步
 楼主| 发表于 2010-8-30 11:01:33 | 显示全部楼层
回复 2# C.L


    兄弟是否可以给出个转换函数呢?
 楼主| 发表于 2010-8-30 11:07:25 | 显示全部楼层
#Include <Array.au3>
_ArrayToString(Const ByRef $avArray [, $sDelim = "|" [, $iStart = 0 [, $iEnd = 0]]])谢谢各位关注
发表于 2010-8-30 11:20:52 | 显示全部楼层
未考虑数组过大的情况,仅支持1维数组。TCP/IP传输自行处理。
#include <array.au3>
Local $Array[100]
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

评分

参与人数 1金钱 +25 收起 理由
afan + 25

查看全部评分

 楼主| 发表于 2010-8-30 12:15:15 | 显示全部楼层
回复 8# 3mile


    谢谢,我会自己把它扩展的了
发表于 2010-8-30 12:21:38 | 显示全部楼层
本帖最后由 C.L 于 2010-8-30 13:32 编辑

回复 7# cutyourchicken

_ArrayToString()函数只能转换1维数组吧?

好像你要转换的是2维数组,给你写个二维数组转换和还原的函数,直接转换成二进制数据,方便TCP传输:
#include<array.au3>
Dim $a[2][3] = [[1,2,3],[3,4,5]]
$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[1]][$temp[2]]
        $k = 3
        For $i=0 To $temp[1]-1
                For $j=0 To $temp[2]-1
                        $array2d [$i][$j] = $temp [$k]
                        $k += 1
                Next
        Next
        Return $array2d
EndFunc

评分

参与人数 1金钱 +20 收起 理由
cutyourchicken + 20

查看全部评分

 楼主| 发表于 2010-8-30 13:48:29 | 显示全部楼层
回复 10# C.L

我自己已经搞定了,不过还是要感谢你
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 03:13 , Processed in 0.090703 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表