Использование 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 и делать то, что нужно.
Я хорошо сейчас. Пожелай мне удачи!
Чтобы помочь другим, в дополнение к ссылкам выше, вот код, который я использовал, и то, что я сделал.
Сначала настройка:
Я сделал это на своем персональном компьютере, где у меня есть настройка IIS, чтобы он мог обрабатывать мой компьютер как сервер и использовать localhost.
Я создал 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.