SOCKE tcp 通讯求解
vb.net吧
全部回复
仅看楼主
level 2
RunnerChin 楼主
正在做一套监控程序,因为时间急,所以一开始用了更熟悉的vb6。现在做完了,打算回头把客户端用vs2010重写一下。下面我的代码(客户端只需要与服务器建立连接,服务器会定时向所有连接的客户端发送状态)
现在接收到的数据几乎每个包都不完整,甚至还内容错位的情况发生,请问这是什么原因产生的呢(vb6的客户端偶尔会收到不完整的数据_极少极少)?会不会是我的代码有问题?
开始尝试过用winsock,但是客户端会在32位XP,2003和64位WIN7同时使用,所以我写出来的时候,在32位系统里运行就报错(mswinsck.ocx注册在 C:\windows\syswow64,如果注册在 system32会报错),找了很久才发现原因。所以只好暂时放弃这个打算。
这个到底要有哪种方法,实在迷茫,还望各位不吝赐教
2012年12月04日 08点12分 1
level 2
RunnerChin 楼主
Imports System.Text
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Public Class Form1
Public Delegate Sub X1(strnew As String)
Dim bytes(1024) As Byte, ss As Socket, svr As New IPEndPoint(IPAddress.Parse("118.145.29.88"), 710), thrd As Thread
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
ss = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
ss.Connect(svr)
Me.Text = ss.Connected
thrd = New Thread(AddressOf getstr)
thrd.Start()
End Sub
Public Sub getstr()
While True
ss.Receive(bytes)
'cgtxt(Encoding.ASCII.GetString(bytes) & vbCrLf)
'If Me.IsHandleCreated Then t1.Invoke(New X1(AddressOf cgtxt), Encoding.ASCII.GetString(bytes))
'If Me.IsHandleCreated Then t1.Invoke(New X1(AddressOf cgtxt), Encoding.ASCII.GetString(bytes) & vbCrLf)
MsgBox(Encoding.ASCII.GetString(bytes))
End While
thrd.Abort()
End Sub Public Sub cgtxt(xxx As String)
t1.AppendText(xxx)
End Sub
End Class
2012年12月04日 08点12分 2
level 10
这个 只能说你找一套信息格式或者自己定义一套信息格式以支持通用。另外用tcp
2012年12月06日 03点12分 3
level 2
RunnerChin 楼主
回访
我最后还是用的socket。winsock问题太多了。
2012年12月06日 10点12分 4
1