tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルオブジェクト参照がオブジェクト インスタンスに設定されていません。
記事No7323
投稿日: 2008/04/12(Sat) 11:12
投稿者ゆうき
ゆうきです。

チャットソフトを作っているのですが、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
というエラーが出てしまいます。

コードです。

    'フィールド
    Private enc As System.Text.Encoding = System.Text.Encoding.UTF8
    Private tcp As System.Net.Sockets.TcpClient
    Private ns As System.Net.Sockets.NetworkStream

    Public Sub Send(ByVal SendingText As String)
        Dim sendMsg As String = SendingText
        Dim sendBytes As Byte() = enc.GetBytes(sendMsg)

        'ここでエラーが発生する
        ns.Write(sendBytes, 0, sendBytes.Length)
        Console.WriteLine(sendMsg)

        tcp.Close()
        Console.WriteLine("切断しました。")

        Console.ReadLine()
    End Sub

ここを参考に作っています。
http://dobon.net/vb/dotnet/internet/tcpclientserver.html

よろしくお願いします。

[ツリー表示へ]
タイトルRe: オブジェクト参照がオブジェクト インスタンスに設定されていません。
記事No7324
投稿日: 2008/04/12(Sat) 12:56
投稿者魔界の仮面弁士
>     Private ns As System.Net.Sockets.NetworkStream
NetworkStream は、参照型ですよね。
この変数 ns への代入は行われて居ませんし、また、New されているわけでも無いので、
この変数は何も格納されていない空っぽの状態(Nothing)になっています。

>         ns.Write(sendBytes, 0, sendBytes.Length)
Write で書きこもうにも、書きこみ先となる実体が存在しないのですから、
これはエラーになってしまいます。まずは ns にオブジェクトを割り当てましょう。

> ここを参考に作っています。
よく見てください。肝心の ns への代入処理が抜けていますよ。


ところで、DOBON.NET さんのところのサンプルを参考にしておられるようですが、
DOBON.NET さんの所の掲示板を利用せず、わざわざ、別サイトであるはずの
こちらの掲示板を利用されているのは、何か理由があるのでしょうか?

[ツリー表示へ]
タイトルRe^2: オブジェクト参照がオブジェクト インスタンスに設定されていません。
記事No7325
投稿日: 2008/04/12(Sat) 13:09
投稿者ゆうき
ゆうきです。
魔界の仮面弁士さん、回答ありがとうございます。

> >     Private ns As System.Net.Sockets.NetworkStream
> NetworkStream は、参照型ですよね。
> この変数 ns への代入も無く、また、New もしていないため、この変数には
> 何も格納されていない空っぽの状態(Nothing)になっています。
>
>
> > ここを参考に作っています。
> よく見てください。肝心の ns への代入処理が抜けていますよ。

そうなんですけど、実はこの中にはないだけで、他のところに書いてあります。
SendとかReceiveとか、いろいろなメソッドで処理をしていて、
tcp.GetStream()をどこに入れようか迷っています。

よろしくお願いします。


> ところで、DOBON.NET さんのところのサンプルを参考にしておられるようですが、
> DOBON.NET さんの所の掲示板を利用せず、わざわざ、別サイトであるはずの
> こちらの掲示板を利用されているのは、何か理由があるのでしょうか?

あ、いえ、たまたまここの掲示板が開いていたものですから・・・

[ツリー表示へ]
タイトルRe^3: オブジェクト参照がオブジェクト インスタンスに設定されていません。
記事No7326
投稿日: 2008/04/12(Sat) 15:52
投稿者魔界の仮面弁士
> そうなんですけど、実はこの中にはないだけで、他のところに書いてあります。

では、その書かれているという箇所を通過していないのではないでしょうか。

If ns Is Nothing Then
 MessageBox.Show("未設定")
Else
 ns.Write(sendBytes, 0, sendBytes.Length)
End If

とした場合に、どのような結果になるか、確認してみてください。


> tcp.GetStream()をどこに入れようか迷っています。
どこに入れても良いですが、送信あるいは受信用のストリームを取得する時に呼び出すべき
ものですから、接続後、かつ Read/Write の前に呼ばれるようにしてみてください。


> あ、いえ、たまたまここの掲示板が開いていたものですから・・・
# (サイト上で)掲示板が開かれているのは、向こうも同じ事なので、
# (ブラウザで)掲示板を開いていた、という意味かな…。

[ツリー表示へ]
タイトルRe^4: オブジェクト参照がオブジェクト インスタンスに設定されていません。
記事No7328
投稿日: 2008/04/13(Sun) 07:09
投稿者ゆうき
ゆうきです。おはようございます。

Listenを開始するのに、ものすごい時間がかかります。
これはアプリケーションの問題なのでしょうか。
それとも、コンピュータ自体の問題でしょうか。
tcp = listener.AcceptTcpClient()ですごい時間がかかっています。

> > tcp.GetStream()をどこに入れようか迷っています。
> どこに入れても良いですが、送信あるいは受信用のストリームを取得する時に呼び出すべき
> ものですから、接続後、かつ Read/Write の前に呼ばれるようにしてみてください。

送信、受信の際にtcp.GetStream()をいれましたが、
tcp = listener.AcceptTcpClient()のせいで、そこまでたどり着けません・・・

よろしくお願いします。

[ツリー表示へ]