クライアントとサーバー プログラムを使用せずに PC 経由でテキストを送信する方法はありますか? プログラムから別のプログラムにテキストを送信するだけです。
2 に答える
ソケットやパイプを使いたくない場合は、ファイルについてしか考えられません。これは、プログラムからプログラムへというよりも、PC から PC への移行が多いものです。
クライアントとサーバーを使用したくない場合でも、これが最も簡単な方法です。サーバーは、コマンド プロンプトで実行されるサーバーですが、プログラムのバックグラウンドで実行されます。サーバーとクライアントはまったく表示されません。数行のコードによる簡単な答えは、TCP 通信です。これにより、両方のコンピューターの IP アドレスが使用され、サーバー/クライアント接続が確立されます。
すべての通信には、それをホストする何かが必要です。これを実現するには、以下を含むようにプログラムをコーディングします。
Imports System.IO
Imports System.Net.Sockets
Public Class Form1
Dim listener As New TcpListener(8000)
Dim Client As TcpClient
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
listener.Stop()
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
listener.Start()
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Dim Data As String = ""
Dim nStart As Integer
Dim nLast As Integer
If listener.Pending = True Then
Client = listener.AcceptTcpClient()
Dim Reader As New StreamReader(Client.GetStream)
While Reader.Peek > -1
Data &= Convert.ToChar(Reader.Read()).ToString
End While
If Not Data = "" Then
msgbox("This is the data recieved: " & Data)
End If
End If
End Sub
End Class
これにより、localhost ポート 8000 で「TCPListener」が開きます。クライアントがリスナーにデータを送信するたびに、テキストボックス Textbox1 のテキストが送信されたデータに送信されます。
サーバーにデータを送信するには、次のコードを使用します。
Option Explicit On
Imports System.IO
Imports System.Net.Sockets
Public Class Form1
Dim Client As TcpClient
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Try
//Ip to the local or remote, forwarded server. 127.0.0.1 is localhost - the same machine.
Client = New TcpClient("127.0.0.1", 8000)
Dim Writer As New StreamWriter(Client.GetStream())
Writer.Write("Hello World!")
Writer.Flush()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
これは、Button1 が押されたときに、データ/文字列「Hello World!」を送信しようとします。サーバーに。
これは、アプリケーションを次のように設定することで、1 つに組み合わせることができます。
Imports System.IO
Imports System.Net.Sockets
Public Class Form1
Dim listener As New TcpListener(8000)
Dim Client As TcpClient
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
listener.Stop()
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
listener.Start()
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Dim Data As String = ""
Dim nStart As Integer
Dim nLast As Integer
If listener.Pending = True Then
Client = listener.AcceptTcpClient()
Dim Reader As New StreamReader(Client.GetStream)
While Reader.Peek > -1
Data &= Convert.ToChar(Reader.Read()).ToString
End While
If Not Data = "" Then
'Change the string
End If
TextBox1.Text = Data
End If
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Try
//This has to be the address to the remote
Client = New TcpClient("xx.xx.xx.xx", 8000)
Dim Writer As New StreamWriter(Client.GetStream())
Writer.Write(TextBox2.Text)
Writer.Flush()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
これを拡張して実際のアプリケーションで使用できるようにするには、backgroundworker を使用して、サーバーとクライアントを別のスレッドで実行するだけです。