jyjuse 发表于 2009-12-30 16:57:48

tcp发送接收问题

本帖最后由 jyjuse 于 2010-1-1 15:00 编辑

tcp发送端连续发送时,接收端收到的数据会出现发送的第一条跟第二条连在一起的问题.必须让发送端等待一段时间,再发送第二条,接收端才正确分别是第一条还是第二条,有什么办法不用等待,直接发送就能到记录正确分条.听说可以监听队列不知道怎么实现,请高手指点.

itljl 发表于 2009-12-30 18:02:27

上源码:face (17):

C.L 发表于 2009-12-30 20:02:29

tcp发送端连续发送时,接收端收到的数据会出现发送的第一条跟第二条连在一起的问题.必须让发送端等待一段时间 ...
jyjuse 发表于 2009-12-30 16:57

第一条跟第二条连在一起?
TCP发送是发送完一条再发送另一条的,怎么会连在一起,没弄明白LZ的意思

jyjuse 发表于 2009-12-30 22:25:28

我是用一个变量接收内容,结果得到的是这样的效果,
$A="A",$B="B"
收到的是AB不是
A
B
这样的结果.不知道说明白没有.

C.L 发表于 2009-12-30 23:47:51

我写了一段代码,测试没你说的那个问题

发送端:
dim $atemp
For $i=0 To 2
        $atemp[$i] = string($i+1)
Next
$atemp = "end"
TCPStartup ()

If @error = -1 Then Exit
For $i=0 To 3
        $socket = TCPConnect (@IPAddress1,65431)
        $send = TCPSend ($socket,$atemp[$i])
Next
TCPCloseSocket ($socket)
TCPShutdown ()

$temp = ""
For $i=0 To 3
        $temp &= $atemp [$i]&@CRLF
Next
MsgBox (0,"发送端",$temp)
循环连续发送4个数组元素

接收端:
Dim $atemp
For $i=0 to 3
        $atemp [$i] = 0
Next
TCPStartup ()
$socket = TCPListen (@IPAddress1,65431)
If @error = -1 Then Exit
$i=0
While 1
        $connect = TCPAccept($socket)
        $data = TCPRecv ($connect,1024)
        ToolTip ($data&@crlf&$i)
        If $data Then
                $atemp[$i] = String($data)
                $i += 1
                If $data == "end" Then ExitLoop
        EndIf
WEnd
TCPCloseSocket ($socket)
TCPShutdown ()
$temp = ""
For $i=0 To 3
        $temp &= $atemp [$i]&@CRLF
Next
MsgBox (0,"接收端",$temp)


显示是正常的,并没有连在一起

jyjuse 发表于 2010-1-1 15:00:31

问题已经解决,说下原理不发原码了.
发送端在发送一条之后进入一个等待循环,等待接收端接之后发送回一个字符,什么字符都可以.收到这个字符之后再发送下一条.这样就快了很多.而且不会出现连接在一起的问题.

itljl 发表于 2010-1-13 18:23:41

确实有这个问题的。

zhaoyi322168 发表于 2014-3-14 14:47:44

TCP发送接收
页: [1]
查看完整版本: tcp发送接收问题