DOBON.NET DOBON.NETプログラミング掲示板過去ログ

TCP通信でportの重複チェック

分類:[.NET]

いつもお世話になっております。
さっそくですが、質問させてください。

現在、TCP通信アプリを作成しております。

※作成にあたって参考にさせて頂いたページ
ttp://dobon.net/vb/dotnet/internet/tcpclientserver.html

IPとPORTを指定し、リスナーで接続をしていくといった参考にさせて頂いたアプリと同じ仕組みで
通信を行っています。
そこで、リスナーをOPENする時に、portが既に他のアプリで使用されていることを検知したいと思っております。

サンプルページですと・・・
'----------------------------------------------
Dim listener As New System.Net.Sockets.TcpListener(ipAdd, port)

'▽ここに検知処理を入れたい
if 例えば..ポートチェック関数(port) = True then
MsgBox("そのポートは既に使用されています。")
End if
'△ここまで!

listener.Start()
'----------------------------------------------

このように使われているポートチェックをできる「ずばり!これ」はありますでしょうか?
以上です。
よろしくお願い致します。


※TcpListener msdn
ttp://msdn.microsoft.com/ja-jp/library/system.net.sockets.tcplistener_methods%28v=vs.80%29.aspx


*** 追記 ***
NETSTATで調べるのもありだと思いますが、それを取り込んでスプリットをかけて・・・といった処理よりは
ずばり!があればと思っています。
※参考ページ
ttp://vsug.jp/tabid/63/forumid/72/postid/5495/view/topic/Default.aspx
ttp://www.ostrosoft.com/vb/projects/iphlpapi.asp
ttp://dobon.net/vb/dotnet/process/standardoutput.html
事前にチェックできたとしても、実際に Start するタイミングではポートが使用中になっている可能性があると思われますが、この場合はどうするつもりでしょうか?

この手の「事前にチェックしてから実行」のパターンでは、チェックするときと実行するときとで状態が変わる可能性があります。それを踏まえた上で、やっぱり事前チェックをやりたいのであれば、事前チェックと実行時の例外キャッチの二段構えが必要になります。


API を使えば、netstat 相当のものをとることができることは知っていますが、よりかんたんな方法があるかどうかはわかりません…。
http://himagine.s20.xrea.com/aspnet/tcptable.html
Azulean様、ご回答ありがとうございます。

>実際に Start するタイミングではポートが使用中になっている可能性があると思われますが、
>この場合はどうするつもりでしょうか?

この場合は、例外でひっかけるしかないと思っています。
ただし、PORTの重複エラーでも例外エラーは、「IPとかプロトコルとかポートとかのエラー」としか伝えてこないので、できるだけポートが重複してると事前に判定したいと思っております。
なので現在は、例外の種類でなんとか判断できないかと調べています。


> API を使えば、netstat 相当のものをとることができることは知っていますが、よりかんたんな方法があるかどうかはわかりません…。
参考ページありがとうございます。
やはりnetstatの類似処理になるんですかね・・・。


もうしばらく皆様のお知恵を拝借したいと思いますので、引き続きご回答お待ちしております。

DOBON.NET | プログラミング道 | プログラミング掲示板