以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]tcp客户端接收问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=110183)

--  作者:kb9702
--  发布时间:2017/11/28 14:33:00
--  [求助]tcp客户端接收问题
 使用tcp客户端案例测试时
将接收的数据写到表中
       Tables("表A").Current("第一列") = str
        Tables("表A").Position = Tables("表A").Position + 1
        Tables("表A").AddNew()
不需要在窗口上显示,将以下代码注销后,为什么每次收到数据多会弹出一个窗口语句中并没有messagebox啊
            \'Dim txt = forms("窗口1").Controls("TextBox2")
            \'txt.Text &= iif(txt.text > "", vbcrlf, "") & str
刚又测试了下,不注释掉窗口显示的语句,增加写入表的语句就会弹出一个窗口。。
[此贴子已经被作者于2017/11/28 14:37:20编辑过]

--  作者:有点甜
--  发布时间:2017/11/28 15:05:00
--  

输出所有代码,看哪里加入了msgbox等代码

 

http://www.foxtable.com/webhelp/scr/1987.htm

 


--  作者:kb9702
--  发布时间:2017/11/28 15:10:00
--  
空的。。表A里没有写任何代码。。项目里也是。。
--  作者:有点甜
--  发布时间:2017/11/28 15:14:00
--  
以下是引用kb9702在2017/11/28 15:10:00的发言:
空的。。表A里没有写任何代码。。项目里也是。。

 

菜单->杂项->工具->输出代码,输出整个项目的代码。


--  作者:kb9702
--  发布时间:2017/11/28 15:18:00
--  

项目事件

 

计划管理

 

表事件

 

窗口表事件

 

窗口与控件事件

 

窗口1_Button1_Click

 

Dim client = vars("client1")

If client IsNot Nothing Then

    client.receiveThread.Abort()

    client.nStream.Close()

End If

 

vars("client1") = new MyClient(e.Form.Controls("txtip").text, e.Form.Controls("txtport").text)

 

窗口1_Button2_Click

 

Dim client = vars("client1")

If client IsNot Nothing Then

    client.receiveThread.Abort()

    client.nStream.Close()

End If

 

窗口1_Button3_Click

 

Dim client = vars("client1")

Dim msg As String = e.Form.Controls("TextBox3").text

Dim stream() As Byte = Encoding.default.GetBytes(msg)

client.nStream.Write(stream, 0, stream.Length)   \'往服务器发送登录信息

 

自定义函数

 

全局代码

 

Default

 

Public socket As MyClient

 

Public Class MyClient

    Public receiveThread As System.Threading.Thread

    Public nStream As System.Net.Sockets.NetworkStream

    Public tcp As  System.Net.Sockets.TcpClient

 

    Public Sub New(ByVal ip As String, ByVal port As Integer)

        Dim server As System.Net.IPAddress = System.Net.IPAddress.Parse(ip)

        tcp = New System.Net.Sockets.TcpClient()

        Try

            tcp.Connect(ip, port)

        Catch generatedExceptionName As Exception

            tcp = Nothing

        End Try

 

        If tcp Is Nothing Then

            MsgBox("无法连接服务器,请重试")

        Else

            Dim netStream As System.Net.Sockets.NetworkStream = tcp.GetStream()

                nStream = netStream

                receiveThread = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf ReceiveMsg))

receiveThread.IsBackground=True

                receiveThread.Start()

            msgbox("登录成功")

        End If

    End Sub

 

    Private Sub ReceiveMsg()

        While True

            Dim packet As Byte() = New Byte(1024) {}

            nStream.Read(packet, 0, packet.Length)

            Dim str As String = Encoding.Default.GetString(packet)

        Tables("表A").Current("第一列") = str

        Tables("表A").Position = Tables("表A").Position + 1

        Tables("表A").AddNew()

            Dim txt = forms("窗口1").Controls("TextBox2")

            txt.Text &= iif(txt.text > "", vbcrlf, "") & str

        End While

    End Sub

End Class

 

菜单事件

 

 


--  作者:kb9702
--  发布时间:2017/11/28 15:21:00
--  
发现一个特点,如果弹出的窗口不关闭,连续几次发送数据,然后关闭弹出的窗口,接着弹出的下一个窗口会将接收到的数据一次性在窗口中呈现
--  作者:有点甜
--  发布时间:2017/11/28 16:21:00
--  

你把项目的bin文件夹删除,重新打开姓名测试。

 

如果还有问题,把你做的项目发上来测试。


--  作者:kb9702
--  发布时间:2017/11/28 16:40:00
--  
就是坛子里下过来的例子插入了三段语句
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:tcp客户端1128.zip


--  作者:有点甜
--  发布时间:2017/11/28 17:28:00
--  

测试了一下,没办法处理。这个是foxtable本身的问题,和你写的代码无关,控制不了。

 

如果你要处理,需要变通一下addnew。也就是接收到信息的时候,不addnew,而是把值添加到一个集合里面。然后做一个计时器,循环取出集合里面的信息,然后addnew。

 


--  作者:kb9702
--  发布时间:2017/11/29 11:01:00
--  
那就没办法了,我试试直接sql语句插入后台应该可以