C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: ソケット TCP通信


(過去ログ 34 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■17337 / inTopicNo.1)  ソケット TCP通信
  
□投稿者/ oeppu (4回)-(2008/04/22(Tue) 12:53:09)

分類:[C#] 

C#でソケットTCP通信プログラムを作成しています。
以下にさせたい動作とソース例を記載しました。
何か改善策等があればご教授お願い致します。

問題点)
・サーバ、クライアント共にコネクション確立後accept、connectで待機してるが
 接続切断時既存のソケットをどのようにcloseさせるか
・現状では送信時に切断が判明する。
・動作的にはこちらから送信しないと受信しないがタイムアウト後に相手が送信して
 きた場合
・他

させたい動作)
・起動時にコネクションを張るスレッドを生成。
・ボタンを押されると任意のデータを送信する。
・送信すると相手から応答データを受信する。
・コネクションは常時張ったまま。

以下当方作成)
// 起動時
public void Init()
{
Thread ThreadNetWork;
// サーバー接続の場合
ThreadNetWork = new Thread(new ThreadStart(this.Server));
// クライアント接続の場合
ThreadNetWork = new Thread(new ThreadStart(this.Client));
ThreadNetWork.IsBackground = true;
ThreadNetWork.Start();
}

private void Server()
{
try
{
IPEndPoint ipEndPoint = new IPEndPoint(GetLocalIpAddress(), networkPort);
Socket connectSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
connectSocket.Bind(ipEndPoint);
connectSocket.Listen(10);
while (true)
{
networkSocket = connectSocket.Accept();
if (networkCloseFlag)
{
break;
}
if (networkSocket.Connected)
{

}
}
connectSocket.Close();
}
catch (Exception ex)
{
}
}

private void Client()
{
while (true)
{
try
{
IPEndPoint serverEndPoint = new IPEndPoint(networkIpAddress, networkPort);
networkSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
networkSocket.Connect(serverEndPoint);
if (networkSocket.Connected)
{

}
}
catch (Exception ex)
{
// 再接続
Thread.Sleep(ParamEthernet.ReConnectTimeOut * 1000);
continue;
}
}
}

// ボタンを押された時にコールされる
private bool Command()
{
// ここで送信処理 NetWork()
}

// 通信
private void NetWork()
{
int bytes = 0;
byte[] recvBuff = new byte[NET_BUFF];
try
{
byte[] sendBuff = Encoding.UTF8.GetBytes(sendData);
networkSocket.Send(sendBuff, sendBuff.Length, SocketFlags.None);
networkSocket.SetSocketOption(
SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout,
ParamEthernet.TransactionTimeOut * 1000);
bytes = networkSocket.Receive(recvBuff, recvBuff.Length, SocketFlags.None);
}
catch (SocketException ex)
{
}
}
引用返信 編集キー/
■17343 / inTopicNo.2)  Re[1]: ソケット TCP通信
□投稿者/ れい (502回)-(2008/04/22(Tue) 15:49:11)
No17337 (oeppu さん) に返信
> C#でソケットTCP通信プログラムを作成しています。
> 以下にさせたい動作とソース例を記載しました。
> 何か改善策等があればご教授お願い致します。

突っ込みどころもたくさんありますし、
何をしたいのかもよくわからないし…。

Socketの使い方で実用上有意義なものは
TCP/UDPそれぞれで数パターン程度しかありません。

オープンなソースを眺めて勉強したり、
本を数冊、流し読み程度でも読むのをオススメします。

この辺が参考になります。
http://tangentsoft.net/wskfaq/

> 問題点)
> ・サーバ、クライアント共にコネクション確立後accept、connectで待機してるが
>  接続切断時既存のソケットをどのようにcloseさせるか
> ・現状では送信時に切断が判明する。
> ・動作的にはこちらから送信しないと受信しないがタイムアウト後に相手が送信して
>  きた場合
> ・他
> させたい動作)
> ・起動時にコネクションを張るスレッドを生成。
> ・ボタンを押されると任意のデータを送信する。
> ・送信すると相手から応答データを受信する。
> ・コネクションは常時張ったまま。

相手が生きてるか調べたいということでしょうか?
なら普通は定期的に相手と通信して生きてるのを確認します。
PingとかEchoとかいいます。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -