范例:VB.net 里面的socket通讯

智造引领未来 2018-10-02 08:56:40
前端时间一直在搞VB.net里面的socket通讯。

或是说是在VB.net实现socket通讯

一些人也许知道,socket这个概念最早是UNIX里面的。 用于实现TCP/IP协议族里面的通讯。

后来被各家公司抄了过去,比如微软 Sun之类的。 目前很多语言里面 ,都是使用socket实现TCP/IP通讯的。或者说大都有socket这么个东西。

三张图:






特别是第三步 ,很很多人都是死这里的

源代码地址

https://download.csdn.net/download/weixin_42822828/10699552
...全文
1137 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
FainSheeg 2019-11-05
  • 打赏
  • 举报
回复
萌新来学习
???Ku50F3hR 2019-11-04
  • 打赏
  • 举报
回复
已下载学习,写的很不错,解决了长期的困扰
育培 2018-11-30
  • 打赏
  • 举报
回复
萌新向大佬学习
vileboy 2018-11-01
  • 打赏
  • 举报
回复
要cB的。cbcbcbcb
湘耒PP 2018-10-06
  • 打赏
  • 举报
回复
学习了.楼主辛苦了
wenluderen 2018-10-02
  • 打赏
  • 举报
回复
骨骼精奇啊 这客户的发送代码和常规的不一样啊


 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim ServerIpAddress As IPAddress
        Try
            ServerIpAddress = IPAddress.Parse(TextBox1.Text)
        Catch ex As Exception
            MessageBox.Show("Server IP設定錯誤")
            Exit Sub
        End Try
        Dim iPort As Integer
        iPort = NumericUpDown1.Value
        Dim RemoteIpEndPoint As New IPEndPoint(ServerIpAddress, iPort)
        Dim myNetworkStream As NetworkStream
        Dim myBytes As Byte()
        myBytes = Encoding.GetEncoding(950).GetBytes(Trim(TextBox2.Text).TrimEnd())
        Try
            myNetworkStream = myTcpClient.GetStream()
            myNetworkStream.Write(myBytes, 0, myBytes.Length)
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Sub
×××××××××× NetworkStream类提供了用于通过发送和接收数据的方法Stream处于阻止模式套接字。 啥意思 机器翻译过来的就是不太清晰明了 ××××××××××× 若要创建NetworkStream,则必须提供连接Socket。使用Write和Read方法用于简单的单线程同步阻塞 I/O。 如果你想要处理 I/O 使用单独的线程,请考虑使用BeginWrite并EndWrite方法,或BeginRead和EndRead方法进行通信 https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets.networkstream?redirectedfrom=MSDN&view=netframework-4.7.2 之前在内存映射里面,看到过流这个概念。 原来网络通讯里面 也有流这个概念
智造引领未来 2018-10-02
  • 打赏
  • 举报
回复
客户端代码

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
    Private myTcpClient As TcpClient
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button1.Enabled = True
        Button2.Enabled = False
        Button3.Enabled = False
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Dim myIPEndPoint As New IPEndPoint(IPAddress.Any, 0)
        myTcpClient = New TcpClient(myIPEndPoint)
        Dim ServerIpAddress As IPAddress
        Try
            ServerIpAddress = IPAddress.Parse(TextBox1.Text)
        Catch ex As Exception
            MessageBox.Show("Server IP設定錯誤")
            Exit Sub
        End Try
        Dim iPort As Integer
        iPort = NumericUpDown1.Value
        Dim RemoteIpEndPoint As New IPEndPoint(ServerIpAddress, iPort)
        Try
            myTcpClient.Connect(RemoteIpEndPoint)
            Do
                If myTcpClient.Connected = True Then
                    Label4.Text = "連線中"
                    Button1.Enabled = False
                    Button2.Enabled = True
                    Button3.Enabled = True
                    Exit Do
                End If
            Loop
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
            Label4.Text = "未連線"
            Button1.Enabled = True
            Button2.Enabled = False
            Button3.Enabled = False
        End Try
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim ServerIpAddress As IPAddress
        Try
            ServerIpAddress = IPAddress.Parse(TextBox1.Text)
        Catch ex As Exception
            MessageBox.Show("Server IP設定錯誤")
            Exit Sub
        End Try
        Dim iPort As Integer
        iPort = NumericUpDown1.Value
        Dim RemoteIpEndPoint As New IPEndPoint(ServerIpAddress, iPort)
        Dim myNetworkStream As NetworkStream
        Dim myBytes As Byte()
        myBytes = Encoding.GetEncoding(950).GetBytes(Trim(TextBox2.Text).TrimEnd())
        Try
            myNetworkStream = myTcpClient.GetStream()
            myNetworkStream.Write(myBytes, 0, myBytes.Length)
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        myTcpClient.Close()
        Label4.Text = "未連線"
        Button1.Enabled = True
        Button2.Enabled = False
        Button3.Enabled = False
    End Sub


End Class

智造引领未来 2018-10-02
  • 打赏
  • 举报
回复
服务器 代码


Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Public Class Form1
    Private Class CSState
        Public myTcpListener As TcpListener
        Public ClientSocket As Socket
        Public mystring As String
    End Class
    Private myDatatable As New DataTable
    Private myTcpListener As TcpListener
    Delegate Sub SetMsgCallBack(ByVal state As Object)
    Private Sub DisplayMsg1(ByVal state As Object)
        Dim myObj As New CSState
        myObj = CType(state, CSState)
        If Me.DataGridView1.InvokeRequired Then
            Dim d As New SetMsgCallBack(AddressOf DisplayMsg1)
            Me.Invoke(d, New Object() {myObj})
        Else
            Dim xRow As DataRow = myDatatable.NewRow()
            xRow.Item(0) = CType(myObj.ClientSocket.RemoteEndPoint, IPEndPoint).Address.ToString()
            xRow.Item(1) = CType(myObj.ClientSocket.RemoteEndPoint, IPEndPoint).Port.ToString()
            xRow.Item(2) = myObj.mystring
            myDatatable.Rows.Add(xRow)
        End If
    End Sub
    Delegate Sub LbCallBack(ByVal myString As String, ByVal myColor As Color)
    Private Sub ChangeLB(ByVal myString As String, ByVal myColor As Color)
        If Me.Label2.InvokeRequired Then
            Dim d As New LbCallBack(AddressOf ChangeLB)
            Me.Invoke(d, New Object() {myString, myColor})
        Else
            Label2.Text = myString
            Label2.ForeColor = myColor
        End If
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        myDatatable.Columns.Add("IP")
        myDatatable.Columns.Add("Port")
        myDatatable.Columns.Add("Data")
        DataGridView1.DataSource = myDatatable
        DataGridView1.Columns(2).Width = 150
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Button1.Enabled = True Then
            Dim iPort As Integer
            iPort = NumericUpDown1.Value
            Button1.Enabled = False
            Button2.Enabled = True
            Dim ListenThread As New Thread(AddressOf StartListen)
            ListenThread.IsBackground = True
            ListenThread.Start(iPort)
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If Button2.Enabled = True Then
            myTcpListener.Stop()
            ChangeLB("TCP Listener 停止", Color.Red)
            Button1.Enabled = True
            Button2.Enabled = False
        End If
    End Sub
    Private Sub StartListen(ByVal state As Object)
        Dim iPort As Integer
        iPort = CType(state, Integer)
        myTcpListener = New TcpListener(IPAddress.Any, iPort)
        Try
            Dim ClientSocket As Socket
            myTcpListener.Start()
            Dim iCount As Integer = 0
            ChangeLB("TCP Listener 已啟動", Color.Blue)
            Do
                ClientSocket = myTcpListener.AcceptSocket()
                If ClientSocket.Connected = True Then
                    Dim myObj As New CSState
                    myObj.myTcpListener = myTcpListener
                    myObj.ClientSocket = ClientSocket
                    myObj.mystring = Now.ToString("yyyy/MM/dd HH:mm:ss") & "已連線"
                    DisplayMsg1(myObj)
                    Dim ReceiveThread As New Thread(AddressOf ReceiveData)
                    ReceiveThread.IsBackground = True
                    ReceiveThread.Start(myObj)
                    iCount += 1
                End If
            Loop
        Catch ex As Exception
            MessageBox.Show(ex.ToString())
        End Try
    End Sub
    Private Sub ReceiveData(ByVal state As Object)
        Dim myObj As New CSState
        myObj.ClientSocket = CType(state, CSState).ClientSocket
        myObj.myTcpListener = CType(state, CSState).myTcpListener
        myObj.mystring = ""
        Dim myNetworkStream As New NetworkStream(myObj.ClientSocket)
        Dim InBytesCount As Integer = 0
        Dim myReceiveBytes(1023) As Byte
        Dim i As Integer = 0
        While True
            Try
                InBytesCount = myNetworkStream.Read(myReceiveBytes, 0, myReceiveBytes.Length)
                System.Threading.Thread.Sleep(100)
                If InBytesCount = 0 Then
                    Exit While
                End If
                myObj.mystring = Encoding.GetEncoding(950).GetString(myReceiveBytes).TrimEnd().TrimStart()
                DisplayMsg1(myObj)
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
                Exit Sub
            End Try
        End While
    End Sub
End Class

16,721

社区成员

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

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