2014年04月16日

.NET用TCPソケット通信ライブラリ【Sock.dll】


.NET用TCPソケット通信ライブラリ【Sock.dll】

【機能】
・サーバーソケット/クライアントソケットの両方に対応
・非同期マルチスレッド対応のサーバーソケット
・クライアントソケットは送信だけではなく、サーバーソケットからの受信も可能
・接続、送信エラー時のリトライに対応(リトライ回数、間隔も指定可能)
・送受信時にイベントが発生するのでプログラミングが簡単

【動作環境】
.NET Framework 4

【制限】
・1回の送受信上限サイズは1024バイト
 ⇒送受信回数に制限は無いので、複数回に分け長電文を送受信することは可能

【使い方】
Sock.dllを参照設定に追加すれば使えます
VB.NETで作ったサンプルプログラムも同梱していますので参考にしてください(VisualBasic2010)
SockSample.exe起動 ⇒ 「ソケット開始」 ⇒ 「クライアントソケット表示」 ⇒ 「接続」⇒「送信」
で簡単なソケット送受信の動作が確認できます。

【使用条件】
・Sock.dllを使用したこと、または使用できなかったことに
 関連して生ずる一切の損害、トラブルに関していかなる責任も負いません。
・Sock.dllは商用利用可能です。自由にプログラムに組み込んで使ってください。
 ただし、Sock.dll単体での商用利用は禁止します
・転載などされる場合は元のアーカイブのままでお願いします

ダウンロード⇒.NET用TCPソケット通信ライブラリ【Sock.dll】
posted by pltokyo at 13:51| Comment(5) | .NET
この記事へのコメント
非同期TCP通信の実現がなかなか困難でHPを散策してこちらを見つけました。
さっそくサンプルを試しています。 何点か質問等ありますのでコメント
させていただきました。

1.'Public Function IsAlive() As Object'は旧形式です・・・という
  警告がでています。
2.漢字等全角を送信しようとするとString2Byteでエラーが発生します。

以上2点です。
もしお時間に余裕がありましたら是非回答いただけるとありがたいです。
Posted by コーヒーブレイク at 2014年07月01日 11:03
コメントありがとうございます。

1.クライアントソケットでのIsAliveメソッドはクライアントから切断した場合は機能しますが、サーバーソケットから切断された場合は機能しません(Trueのまま変わらない)。それの注意喚起のために旧形式警告を利用しています。

2.日本語の送信は考慮していませんでした。文字コードの問題もあり、ライブラリ側ですぐに対応するのは難しい気もするので、日本語の場合は16進数表記に変換するなどして送信頂けますでしょうか。
Posted by at 2014年07月09日 11:07
質問2点について丁寧な回答ありがとうございました。
Posted by コーヒーブレイク at 2014年07月11日 10:43
Sock.dllを使用させていただいております。

通信時、ReadCallbackエラーが発生しました。

通信ログの内容は、以下の通りです。
07/09 13:41:55.87 [OnMessage]送信待ちに追加しました:192.168.0.13:49675->192.168.0.12:48200 Key:TIME134155.871 送信内容:#1M|1|1 | |1|201907091352130054 | | | 0|00
07/09 13:41:55.88 [OnMessage]送信待ちあり 192.168.0.13:49675->192.168.0.12:48200 SendingIndex:0
07/09 13:41:55.89 [OnMessage]192.168.0.13:49675->192.168.0.12:48200 送信開始 タイムアウト->2019/07/09 13:41:56.89 SendingIndex:0
07/09 13:41:55.89 [OnSendEnd] #1M|1|1 | |1|201907091352130054 | | | 0|00
07/09 13:41:55.90 [OnMessage]192.168.0.13:49675->192.168.0.12:48200 88バイト送信-> #1M|1|1 | |1|201907091352130054 | | | 0|00(0223314D7C317C312020202020202020202020202020207C207C317C3230313930373039313335323133303035342020202020202020202020202020202020202020202020202020207C2020207C2020207C20307C303003) SendingIndex:0
07/09 13:41:55.91 [OnMessage]192.168.0.12:48200->192.168.0.13:49675 戻り待ち開始 タイムアウト->2019/07/09 13:42:05.91 SendingIndex:0
07/09 13:41:56.17 [OnMessage]192.168.0.12:48200->192.168.0.13:49675 60バイト受信-> #1m|0|201907091352130054 | 0|00(0223316D7C307C3230313930373039313335323133303035342020202020202020202020202020202020202020202020202020207C2020307C303003) SendingIndex:0
07/09 13:41:56.19 [OnMessage]192.168.0.13:49675 -> 192.168.0.12:48200 結果受信完了 SendingIndex:0
07/09 13:41:56.26 [OnMessage]192.168.0.13:49675 ReadCallbackエラー:インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
パラメーター名:index pos:432

何か原因がわかれば、ご教示頂ければ幸いです。
お忙しいところ申し訳ありませんが、よろしくお願いします。
Posted by なべちゃん at 2019年07月10日 20:07
こちら、ソースコードを公開しています。ご自由にお使いください。
https://github.com/tkiha/sock
Posted by at 2019年08月21日 23:43
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: