アプリ版:「スタンプのみでお礼する」機能のリリースについて

ソケット通信で、接続してきた
クライアント(TcpClient tempclient)から、
NetworkStream,StreamReader,StreamWriterなどを
作っています。

Class A

while(true){
tcpclient=server.AcceptClient();
networkstream=tcpclient.getStream();
streamreder=new StreamReader(networkstream...);
mythread=new Mythread(tcpclient);
//
networkstream.close()
streamreader.close()
//これらを加えると、下の、/* */でエラーになります。
}

MyThread B

{
Public Mythread(TcpCLient tcpclient){
/*
ns=tcpclient.Getstream
sr=...
*/
}

このクライアントを、別のスレッドで使うため、
mythread=new MyThread(tcpclient)などとして、
別のクラスにもっていき、
そこでも、新たに、NetworkStream,StreamReaderを
作ったとします。
この場合、1つのクライアントにつき、2つの
ストリームができるのでしょうか。
経験上、ストリームを作成するコードは
問題なく動きます。
しかし、新たにストリームを得たので、古いのを
クローズすると、エラーになります。
新たに作ったストリームは、実は、古いストリームを、
使いまわしていることになるのでしょうか。

少し、分かりづらいかもしれませんが、
何か分かる人がいましたら、よろしくお願いします。

A 回答 (1件)

具体的にどんなクラスを使っているのかよく分かりませんが、常識的な実装をしているならストリームをクローズするときには対応するソケットを破棄しているでしょう。

ストリームをクローズせずに廃棄(delete)すると上手くいくかもしれませんが、デストラクタがクローズすることも考えられるので上手くいく保証はありません。
使っているストリームクラスにソケットとの関係を切断する機能が実装されていれば良いですが、そうでなければソケットとストリームは一対一で使うことが前提になると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
貴重な意見で、非常に参考になりました。
一体のものとして、扱っていきたいと
思います。

お礼日時:2006/12/10 20:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!