メッセージの送受信に tcp ソケットを使用するクライアントがあります。彼らは私たちに宛先 IP とポートを提供しました。この感覚をつかむために、私はクライアントとサーバーの両方の小さなコンソール アプリケーションから始めました。IPとポートを使用しました。サーバーを起動しました。次に、クライアントを介して文字列を送信しました。サーバーコンソールで見ることができました。このプログラムは、クライアントからサーバーへの一方向接続のみを確立します。どうすれば双方向を実現できますか? TCP リスナーを実装する必要がありますか?
Server:
static void Main(string[] args)
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
sck.Bind(localEndpoint);
sck.Listen(100);
Socket accepted = sck.Accept();
Buffer = new byte[accepted.SendBufferSize];
int bytesRead = accepted.Receive(Buffer);
byte[] formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = Buffer[i];
}
string strData = Encoding.ASCII.GetString(formatted);
Console.WriteLine(strData);
Console.Read();
sck.Close();
accepted.Close();
}
Client:
static void Main(string[] args)
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
// IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse("68.109.249.167"), 35520);
try
{
sck.Connect(localEndpoint);
}
catch(Exception ex)
{
Console.Write("unable to connect to remote endpoint");
Main(args);
}
Console.Write("Enter Text");
string text=Console.ReadLine();
byte[] data= Encoding.ASCII.GetBytes(text);
sck.Send(data);
Console.Write("Data Sent!\r\n");
Console.Write("Presee any key to continue");
Console.Read();
sck.Close();
}
これで、これらのデモ クライアント、サーバーは正常に通信できるようになりました。
実際には、リスナーはどこに出てくるのでしょうか? 接続を確立し、何らかのリクエストを送信します。 sck.Listen(100);
ソケットをリッスン状態にします。彼らは同じポートで応答を送信しますか? Tcplistener クラスを使用する必要がありますか?
http://msdn.microsoft.com/en-us/library/bb397809%28v=vs.90%29.aspx . 提案してください
ありがとうございました