2011-08-07 14 views
0

私は 'form1'と 'form2'を持っています。C#ソケット接続が次のwinformで失われる

現在、C#でTCP IPソケットを使用しています。 私のサーバーにform1で接続すると、form2がロードされます。 しかし、form2では、私はすでに接続していないし、私は接続していないと言うエラーを受け取った。

アプリケーションのすべてのフォームに接続されていることを確認するにはどうすればよいですか? 私のPCで今すぐテストしてみてください。 シンプルなC#チャットアプリケーションで、C#にはかなり新しいものです。

をForm1(以下私の接続ボタンのコードがある)

clientSocket.Connect(tbxIP.Text, 8888); 
serverStream = clientSocket.GetStream(); 
string faciName = "Facilitator:" + "$"; 

byte[] outStream = System.Text.Encoding.ASCII.GetBytes(faciName); 
serverStream.Write(outStream, 0, outStream.Length); 
serverStream.Flush(); 


Thread ctThread = new Thread(getMessage); 
ctThread.Start(); 

フォーム2(以下、サーバへの私のメッセージ送信ボタンをコードしている)

serverStream = clientSocket.GetStream(); 
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(tbxMessageBox.Text + "$"); 
if (serverStream != null) 
{ 
    serverStream.Write(outStream, 0, outStream.Length); 
    serverStream.Flush(); 
    tbxMessageBox.Clear(); 
} 

ありがとうございました。

+2

伴いコードは、あなたの*コード内の問題を見つけるために私たちを助けるかもしれません*。 – foxy

+0

あなたのコードを教えてもらえますか? –

答えて

2

はIMOこれにアプローチする方法は(代わりに、ソケットベースのAPIの)、その後、

すなわち、フォームにこのインスタンスへの参照を渡す 動作を提供し、いくつかのクラスに、すべてのソケットの振る舞いをカプセル化することです
ServerComms comms = new ServerComms(address); 
comms.Open(); 
using(var mainForm = new MainForm()) { 
    mainForm.Comms = comms; 
    Application.Run(mainForm); 
} 

明らかにあなたのMainFormインスタンスも、以降、これを渡すことができます。

void ShowChildForm() { 
    var childForm = new ChildForm(); 
    childForm.Comms = Comms; 
    childForm.Show(); 
} 
関連する問題