tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB5でのInet/WinsockはVB2010でどうなったんでしょうか?
記事No11027
投稿日: 2013/01/30(Wed) 08:58
投稿者birei
お世話になります。
VB5でのInet/Winsockを使ったアプリをVb2010に移植したいのですが、
どの様に皆さん移植しましたか?
Inetでヘッダーを取ったり非同期通信等や
簡単なチャット等のサンプルコードなど何処かにありませんか?

VB2010初心者です。宜しくお願いします。

[ツリー表示へ]
タイトルRe: VB5でのInet/WinsockはVB2010でどうなったんでしょうか?
記事No11028
投稿日: 2013/01/30(Wed) 15:14
投稿者shu
> お世話になります。
> VB5でのInet/Winsockを使ったアプリをVb2010に移植したいのですが、
> どの様に皆さん移植しましたか?
> Inetでヘッダーを取ったり非同期通信等や
> 簡単なチャット等のサンプルコードなど何処かにありませんか?
>
> VB2010初心者です。宜しくお願いします。

http://codezine.jp/article/detail/22?p=1
にどぼんさん作成のチャットについて載っています。

[ツリー表示へ]
タイトルRe^2: VB5でのInet/WinsockはVB2010でどうなったんでしょうか?
記事No11031
投稿日: 2013/01/31(Thu) 22:05
投稿者birei
>どぼんさん作成のチャットについて載っています。

情報ありがとうございます。

ところでこのソースを参考にサーバー側を組んでみようと思いましたが
Me.Listen("0.0.0.0", 2345)等とやっても、普通の状態ではエラーになります。
何か参照設定が必要なのでしょうか?

[ツリー表示へ]
タイトルRe^3: VB5でのInet/WinsockはVB2010でどうなったんでしょうか?
記事No11032
投稿日: 2013/02/01(Fri) 09:59
投稿者YuO
> ところでこのソースを参考にサーバー側を組んでみようと思いましたが
> Me.Listen("0.0.0.0", 2345)等とやっても、普通の状態ではエラーになります。
> 何か参照設定が必要なのでしょうか?

まず,「エラー」とは何ですか。
エラーメッセージを提示するなりして下さい。

次に,唐突に出てきている,「Me」とはどのクラスのインスタンスですか。

先のCodeZineではSystem.Net.Sockets.Socketを扱っています。
Socketクラスは通常継承せずに,そのままインスタンス化して使いますから,
Me.Listenという形になることは普通ありません。

また,SocketクラスのListenメソッドの引数はInteger型のbacklogの1つのみです。
http://msdn.microsoft.com/ja-jp/library/system.net.sockets.socket(v=vs.100).aspx
http://msdn.microsoft.com/ja-jp/library/system.net.sockets.socket.listen(v=vs.100).aspx

[ツリー表示へ]
タイトルRe^4: VB5でのInet/WinsockはVB2010でどうなったんでしょうか?
記事No11041
投稿日: 2013/02/05(Tue) 12:25
投稿者birei
貴重なレスありがとうございます。
現在CodeZineのプログラムを解読しておりますが、
第一に、プログラムのバイナリ本体が私のXP上で動作しません。
まず、サーバーを立ち上げクライエントを立ち上げ、
クライエント側の接続要求がエラーで受理されません。
エラーメッセージは「ソケットで接続されていないかsendto呼び出しを使ってデータグラムソケットで送信するときにアドレスが指定されていないため、データの送受信を要求することは禁じられています」です。

またコードもVB5と比較にならないほどの複雑な記述に当惑しています。
TCP/IPで接続する仕組みはVB5と同じなのに
.netになって簡単になるどころか真逆の感じです。
(まだ.netを触って2週目のせいもありますが)
私としては、50行程度でポイントだけわかり易く書ける物
が出切ると思っており、現在それを目指しております。

>先のCodeZineではSystem.Net.Sockets.Socketを扱っています
情報ありがとうございます。
これだと
Public Class Form1
    Dim sc As System.Net.Sockets.Socket
   Private Sub Form1_Load(....) Handles MyBase.Load
        sc.Listen(1234)
・・・・・
でエラーになりませんね。
ただ今の所、ポート番号をどこに設定して良いのか、
イベントを
AddHandler sc.AcceptedClient, AddressOf server_AcceptedClient
見たいに取るのだろうと推定してはおりますが、良くわかりません。
CodeZineのプログラムを解析しておりますが
何か他のご存知のサンプルコードなどありましたらご紹介ください。

[ツリー表示へ]
タイトルRe^5: VB5でのInet/WinsockはVB2010でどうなったんでしょうか?
記事No11043
投稿日: 2013/02/05(Tue) 14:25
投稿者YuO
.NET FrameworkのSocketクラスは,基本的にBerkeley SOCKETやWinSockを生で操作する感覚に近いです。
WinSockコントロールの方が,元々「特殊な存在」だったのです。
# WinSockコントロールにまったくなじめなかった覚えが……。


> またコードもVB5と比較にならないほどの複雑な記述に当惑しています。
> TCP/IPで接続する仕組みはVB5と同じなのに
> .netになって簡単になるどころか真逆の感じです。

・サーバー側はSocket作ってBindしてListenしてAcceptを呼び出す。
・クライアント側はSocket作ってConnectする。
あとは,Send/Receiveやその非同期系メソッドを使ってやりとりをするだけです。
この手順は,ソケット通信そのままです。


> Public Class Form1
>     Dim sc As System.Net.Sockets.Socket
>    Private Sub Form1_Load(....) Handles MyBase.Load
>         sc.Listen(1234)
> ・・・・・

とりあえず,テストするならフォームよりもコンソールの方がやりやすいと思いますよ。


> ただ今の所、ポート番号をどこに設定して良いのか、

BindまたはConnectする時に指定します。


> イベントを
>  AddHandler sc.AcceptedClient, AddressOf server_AcceptedClient
> 見たいに取るのだろうと推定してはおりますが、良くわかりません。

Socketクラスはイベントを持っていません。
非同期コールバックによる通知になります。

[ツリー表示へ]