以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]tcp客户端接收问题 (http://foxtable.net/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 -- 就是坛子里下过来的例子插入了三段语句
|
||||
-- 作者:有点甜 -- 发布时间:2017/11/28 17:28:00 -- 测试了一下,没办法处理。这个是foxtable本身的问题,和你写的代码无关,控制不了。
如果你要处理,需要变通一下addnew。也就是接收到信息的时候,不addnew,而是把值添加到一个集合里面。然后做一个计时器,循环取出集合里面的信息,然后addnew。
|
||||
-- 作者:kb9702 -- 发布时间:2017/11/29 11:01:00 -- 那就没办法了,我试试直接sql语句插入后台应该可以 |