Использование Socket API в SQL CLR

Я пытаюсь использовать сторонний API, который является API на основе сокетов с SQL CLR и vb.net. Я знаю, как это сделать с помощью API REST, однако не могу понять, как начать работу с Socket API.

У кого-нибудь есть ссылки или очень простой пример "GET", из которого я могу извлечь уроки?

2 ответа

Я думаю, что нашел то, что искал - это было началом, чтобы я понял, как это работает. Я нашел несколько уроков на 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 Form, чтобы действовать как "Клиент". С помощью этих демонстрационных приложений я смог выяснить, как использовать класс System.Net.Socket, чтобы узнать, как может работать API-интерфейс Socket, поэтому я могу посмотреть, смогу ли я применить эти знания к стороннему API-интерфейсу Socket в мое окончательное решение.

Отсюда я смогу использовать его в / с SQL CLR и делать то, что нужно.

Я хорошо сейчас. Пожелай мне удачи!

Чтобы помочь другим, в дополнение к ссылкам выше, вот код, который я использовал, и то, что я сделал.

Сначала настройка:

  1. Я сделал это на своем персональном компьютере, где у меня есть настройка IIS, чтобы он мог обрабатывать мой компьютер как сервер и использовать localhost.

  2. Я создал 2 отдельных проекта / решения в Visual Studio 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

@ptownbro, мне кажется, вы спрашиваете, как на самом деле использовать Socket API, а не столько Socket API в SQLCLR. Мое предложение состоит в том, чтобы прочитать документацию API и посмотреть, какие методы есть. Вообще говоря, это то, что вы делаете:

  • Определите конечную точку, куда отправлять.
  • Создайте экземпляр класса сокета.
  • Подключите экземпляр сокета к конечной точке.
  • Отправьте сообщение в виде байтового массива, используя любой метод, который экземпляр сокета предоставляет для отправки.

Выше приведено очень общее объяснение, так как я не знаю, какой API вы собираетесь использовать. Вот страница с примером, как это сделать в C# с использованием.NET API.

Обратите внимание, что я упоминаю только отправку. Я настоятельно не рекомендую получать, если вы собираетесь делать это из SQLCLR, так как вы должны использовать "нормальные" операторы T-SQL DML для получения данных в SQL Server.

Другие вопросы по тегам