私はC#でTCP通信を調べたいと思っていました。私はすでにTCPを使って送受信するシンプルなプログラムで学んだ。しかし私は一歩進んで行きたい。機能からの1つのTCP接続へのアクセス。 C#
- EDIT:シンプルなプログラムはすべて共通の1つで、TCP接続を開いたり、接続を送受信したり閉じたりします。必要に応じて、彼らはもう一度始めます。しかし、これは私が自分のプログラムに留意したことではありません。私が何をしたいかEDIT--
:
私は、サーバーへの接続を確立し、ボタンでフォームを持っています。接続が確立された後、ユーザーはボタン(バイト)を介してコマンドを送信し、ラベルを表示しているサーバーから応答を受け取ることができます。
私が思いついた解決策の種類:私は、プログラムコードの残りの部分から分離、通信を処理するためのクラスを作成した私のプログラムは非常に柔軟にしたかったので
。
このクラスでは、CommunicationTCPに3つの機能を作成しました。
- サーバー
からの回答を受信するサーバ
.
.
.
using System.Net.Sockets;
//eventually tried declarations like
//TcpClient tcpclnt;
//NetworkStream tcpStream;
namespace MyProgram
{
public partial class CommunicationTCP
{
public static void Connect()
{
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ServerIP,ServerPORT);
}
public static void TCPSendData()
{
TcpClient tcpclnt = new TcpClient();
NetworkStream netStream = tcpclnt.GetStream();
byte[] sendbytes = Encoding.UTF8.GetBytes("COMMAND");
netStream.Write(sendbytes, 0, sendbytes.Length);
}
public static void TCPGetData()
{
//not yet programmed.
}
}
}
のようにそれが見えるもの。私が最初に言ったように、コマンドの送信はボタンを介してユーザーによって送信されます。 悲しいことに、tcpclnt
はその機能内でのみ使用できるため、上記のコードは機能しません。私は関数と宣言の異なる定義を試しましたが、成功しませんでした。
tcp接続が開いたままでコマンドが送信されるようにプログラムを変更するにはどうすればよいですか?
すべての機能で同じインスタンスの 'TcpClient'を使用する必要があります。 'tcpclnt'をローカル関数変数ではなくクラスレベルの変数にします。 – wablab