0

我正在尝试使用第三方 API,它是基于套接字的 API,带有 SQL CLR 和 vb.net。我知道如何使用 REST API 来做到这一点,但是,我不知道如何开始使用 Socket API。

有没有人有任何参考资料或我可以用来学习的非常基本的“GET”示例?

4

2 回答 2

0

我想我找到了我正在寻找的东西——这是让我了解它是如何工作的开始。我在 youtube 上找到了一些教程来帮助我入门

这个有两个部分:

https://www.youtube.com/watch?v=T2hgTKL_Haw&t=382s

https://www.youtube.com/watch?v=X2Hvs2qepBw&t=126s

这个有一个部分:

https://www.youtube.com/watch?v=MSiBbtxWpI8

第一个教程创建一个充当“服务器”的控制台应用程序,然后创建一个充当“客户端”的 Windows 窗体应用程序。通过这些演示应用程序,我能够弄清楚如何使用“System.Net.Socket”类来了解 Socket API 是如何工作的,因此我可以看看我是否可以将这些知识应用到第三方 Socket API我的最终解决方案。

从这里,我将能够在/与 SQL CLR 中使用它并执行所需的操作。

我现在很好。祝我好运!

为了帮助其他人,除了上面的链接,这里是我使用的代码和我做了什么。

首先是设置:

  1. 我在我的个人计算机上执行了此操作,在那里我设置了 IIS,可以将我的计算机视为服务器并使用 localhost。

  2. 我在 Visual Studio 中创建了 2 个单独的项目/解决方案 1)一个作为控制台应用程序,充当“服务器”,2)一个作为 Windows 窗体应用程序,充当客户端。

服务器应用程序的代码:

Imports System.Net.Sockets
Imports System.Text

Module Module1

Sub Main()
    Dim VarSocketServer As New TcpListener(8888)
    Dim VarSocketClient As TcpClient
    Dim VarRequestCount As Integer = 0

    VarSocketServer.Start()
    Console.WriteLine(">> Server Started")

    VarSocketClient = VarSocketServer.AcceptTcpClient
    Console.WriteLine(">> Accept connection from client")

    While (True)
        Try
            VarRequestCount = VarRequestCount + 1

            Dim VarNetworkStream As NetworkStream = VarSocketClient.GetStream()
            Dim VarInStream(10024) As Byte
            Dim VarBytesReadAs Integer = VarNetworkStream.Read(VarInStream, 0, VarInStream.Length)
            Dim VarDataFromClient As String = System.Text.Encoding.ASCII.GetString(VarInStream)
            VarDataFromClient = VarDataFromClient.Substring(0, VarDataFromClient.IndexOf("$"))

        Console.WriteLine(">> Data from client: " + VarDataFromClient)

            Dim VarServerResponse As String = "Server response: " + Convert.ToString(VarRequestCount)
            Dim VarSendByte As [Byte]() = System.Text.Encoding.ASCII.GetBytes(VarServerResponse)
            VarNetworkStream.Write(VarSendByte, 0, VarSendByte.Length)
            VarNetworkStream.Flush()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End While

    VarSocketClient.Close()
    VarSocketServer.Stop()

    Console.WriteLine(">> Exit")
    Console.ReadLine()
End Sub
End Module

客户端代码的代码:

Imports System.Net.Sockets
Imports System.Text

Public Class Form1
Dim VarSocketServer As New TcpClient
Dim VarNetworkStream As NetworkStream

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextBox1.Text = TextBox1.Text + Environment.NewLine + ">> Client Started")

    VarSocketServer.Connect("127.0.0.1", 8888)
    Label1.Text = "The client is connected to server"

    Dim VarNetworkStream As NetworkStream = VarSocketServer.GetStream()

    Dim VarClientRequest As String = "Message from client$"
    Dim VarSendByte As [Byte]() = System.Text.Encoding.ASCII.GetBytes(VarClientRequest)
    VarNetworkStream.Write(VarSendByte, 0, VarSendByte.Length)
    VarNetworkStream.Flush()

    Dim VarInStream(10024) As Byte
    Dim VarBytesRead = VarNetworkStream.Read(VarInStream, 0, VarInStream.Length)
    Dim VarDataFromServer As String = System.Text.Encoding.ASCII.GetString(VarInStream)
    TextBox1.Text = TextBox1.Text + Environment.NewLine + ">> Data from server: " + VarDataFromServer)

    VarNetworkStream.Flush()
End Sub
End Class
于 2019-08-18T18:52:56.040 回答
0

@ptownbro,在我看来,您问的是如何实际使用 Socket API,而不是 SQLCLR 中的 Socket API。我的建议是阅读 API 的文档,看看有哪些方法。一般来说,这就是你所做的:

  • 定义一个端点,发送到哪里。
  • 创建套接字类的实例。
  • 将套接字实例连接到端点。
  • 使用套接字实例公开用于发送的任何方法将消息作为字节数组发送。

以上是非常笼统的解释,因为我不知道您打算使用什么 API。是一个页面,其中包含如何使用 .NET API 在 C# 中执行此操作的示例。

请注意,我只提到发送。如果您打算从 SQLCLR 执行此操作,我强烈建议您不要接收,因为您应该使用“普通”T-SQL DML 语句将数据获取到 SQL Server。

于 2019-08-17T04:27:25.707 回答