簡単なネットワークプログラムなのですが・・・
ネットワーク通信の基礎を学ぼうと、いろいろなサイトをみながらSocket通信の簡単なメッセージ送受信を行おうとしているのですが、streamを使って送信したメッセージを送信、又は受信するときにsocketを閉じないと送信できません。
そして常に受信させたいのですが、socketを閉じているため、nullexceptionになってしまいます。
何か別の手はありますでしょうか・・・?
現在↓のような感じで行っています。
private void 待機ToolStripMenuItem_Click(object sender, EventArgs e)
{
//サーバーを開始
Int32 port = 9999;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, port);
server.Start();
threadA = new Thread(recvData);
threadA.Start();
}
// 受信用(マルチスレッド)
public void recvData()
{
//接続待機
this.Invoke(new MyDelegate(delegate
{
textBox1.Text = "接続待機中";
}));
TcpClient client = server.AcceptTcpClient();
//接続
this.Invoke(new MyDelegate(delegate
{
textBox1.Text = "接続されました";
}));
NetworkStream stream = client.GetStream();
// 無限ループ
while (true)
{
Byte[] bytes = new Byte[20]; //わざと小さく取ってある。
int i;
//メッセージを受信
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
String data = System.Text.Encoding.UTF8.GetString(bytes, 0, i);
Console.WriteLine(String.Format("受信: {0}", data));
}
client.Close();
}
お礼
同期は相手の返事が返ってくるまで処理を止めて 非同期は相手の返事が返ってこなくても メインの処理を行うってことですね。 どうも、ありがとうございます。