vb.net socket编程问题

sky2glass 2014-06-11 05:36:53
我的软件软件建构是 有一个客户端, 然后有N服务器 客户端通过TCp的方式 同时连接到N个服务器,(一个服务器在客户端上对应一个socket) 客户端发送数据没有什么问题,但是接收起来就特别麻烦,只能一个socket单独开一个线程来接受,如果远程服务器不多的话开机个线程也没有关系。但是如果多的话就不行了。 vb.net socket接收数据能不能 想vb6那样事件触发而不用我一直开个线程在等它。

我以前一直使用vb6的winsock控件,很方便设置要远程的Ip端口后,如果想接受数据 只要关心DataArrival就可以。
后来使用vb.net 的 socket,发现这个类不是很好用,接受数据采用网上提供的异步方式接受几次就提示连接断开 会主机放弃,很郁闷。

各位可能帮帮我,我现在不想在vb.net下用winsocket控件,这个控件虽然依然能用,但是既然不用vb6了就不想用COM+组件了
...全文
589 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
silence 2018-07-16
  • 打赏
  • 举报
回复
tcpserver类哪里弄?默认的.NET4没有吧
homeyone 2014-08-14
  • 打赏
  • 举报
回复
学习一下,以后用的到
嘉楠 2014-08-12
  • 打赏
  • 举报
回复
请问lym11023有完整的示例源码吗?请给一个谢谢,58364245@qq.com
  • 打赏
  • 举报
回复
并发50都没问题,请问你是什么事都得让人帮你做好么,如果一个软件工程师碰到这点问题都不会自己去测试,还等待别人给答案,这你觉得靠谱么?
sky2glass 2014-06-16
  • 打赏
  • 举报
回复
TCPClient类 你有测试过吗,并发连接20个socket可有压力,稳定性怎么样。每个socket基本是一秒一个数据包 包的内容不多,不到1000个字节。 我是用在工程上的
  • 打赏
  • 举报
回复
在服务器程序添加一个TCPServer类,客户端程序添加一个TCPClient类,这个类的源码见如下链接: http://blog.csdn.net/lym11023/article/details/15502909 在服务器端界面窗体代码内添加如下代码:

Imports System.Threading
Public Class ServerMain
    Public WithEvents MyServer As TCPServer
    Public Delegate Sub ReceiveData(ByVal sType As Integer, ByVal DataString As String)
  Private Sub ServerMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try    
              MyServer = New TCPServer(5000, 10000, 4096, 50)
              MyServer.StartServer()
        Catch ex As Exception
              MsgBox(ex.Message, , Application.ProductName & "错误")
        End Try

  End Sub
    Private Sub MyServer_DataArrived(ByVal value() As Byte, ByVal Len As Integer, ByVal IPAddress As String, ByVal Port As String) Handles MyServer.DataArrived
       ’服务器接收客户端发过来的数据
       ’Add your code here  
        Try
            Dim myStr As String
            myStr = System.Text.UTF8Encoding.UTF8.GetString(value)
            Debug.Print(MyStr)
        Catch ex As Exception
            Debug.Print(ex.message)
        End Try
    End Sub

    Private Sub MyServer_ClientClose(ByVal IP As String, ByVal Port As String) Handles MyServer.ClientClose
        ‘客户端与服务服务器端断开连接
       ’Add your code here  
    End Sub

    Private Sub MyServer_ClientConnected(ByVal IP As String, ByVal Port As String) Handles MyServer.ClientConnected
       '客户端向服务服务器端发起连接
       ’Add your code here  
    End Sub

    Private Sub MyServer_Exception(ByVal ex As System.Exception) Handles MyServer.Exception
       ' Socket套接字通讯捕捉到错误
       ’Add your code here  
    End Sub
End Class
在客户端界面窗体代码内添加如下代码:

Imports System.Windows.Forms
Imports System.Threading
Imports System.Net

Public Class ClientMain
    Public  MyClient(N) As TCPClient
    Private Sub ClientMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            For index As Integer = 0 To 20
                MyClient(index) = new TCPClient(Host_IP(index), 5000, 4096, 90 ) 'Host_IP()内存放N个服务器端的IP地址
                If MyClient.Connected Then
                        AddHandler MyClient(index).ClientClosed, AddressOf MyClient_ClientClosed
                        AddHandler MyClient(index).Exception, AddressOf MyClient_Exception
                        AddHandler MyClient(index).DataArrived, AddressOf MyClient_DataArrived
                        Debug.print("Connet Host:" &Host_IP(index))
                Else
                        Debug.print("Disconnet Host:" &Host_IP(index))
                End If
            Next
       Catch ex As Exception
            Debug.Print(ex.message)
        End Try
    Private Sub MyClient_DataArrived(ByVal value() As Byte, ByVal Len As Integer) 
        Try
            Dim myStr As String
            myStr = System.Text.UTF8Encoding.UTF8.GetString(value)
            Debug.Print(myStr)
        Catch ex As Exception
            Debug.Print(ex.message)
        End Try
   End Sub
    Private Sub MyClient_ClientClosed()
      'add your code here
    End Sub
  Private Sub MyClient_Exception(ByVal ex As System.Exception)
       'add your code here  
  End Sub
End Class
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.beginreceive(v=vs.100).aspx http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread(v=vs.110).aspx

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧