2012-01-04 19 views
0

C#を使用してasp.netでソケットを使用しようとしました。ソケットを使用してWebアプリケーションでチャットをするとエラーが発生する

クライアントコードのコメント行でエラーが表示されます。

サーバーコードが正しく実行されています。

これはエラーを通知するクライアントコードです。

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Drawing; 
using System.Collections; 
using System.ComponentModel; 
using System.Threading; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 

public partial class _Default : System.Web.UI.Page 
{ 
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); 
NetworkStream serverStream = default(NetworkStream); 
string readData = null; 

protected void Page_Load(object sender, EventArgs e) 
{ 



} 

protected void Post_Click(object sender, EventArgs e) 
{ 
    if (txtmsg.Text != "") 
    { 
     byte[] outStream = System.Text.Encoding.ASCII.GetBytes(txtmsg.Text + "$"); 
     serverStream.Write(outStream, 0, outStream.Length); 
     // This line gives error Saying Object reference not set to an instance of an object. 
     serverStream.Flush(); 
    } 


} 
protected void Connect_Click(object sender, EventArgs e) 
{ 
    if (txtSub.Text != "") 
    { 
     try 
     { 
      readData = "Conected to Chat Server ..."; 
      msg(); 
      clientSocket.Connect("127.0.0.1", 8888); 
      serverStream = clientSocket.GetStream(); 

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

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

     } 
     catch 
     { 
      //Disconnect(); 
     } 
    } 
} 

private void getMessage() 
{ 
    while (true) 
    { 
     serverStream = clientSocket.GetStream(); 
     int buffSize = 0; 
     byte[] inStream = new byte[10025]; 
     buffSize = clientSocket.ReceiveBufferSize; 
     serverStream.Read(inStream, 0, buffSize); 
     string returndata = System.Text.Encoding.ASCII.GetString(inStream); 
     readData = "" + returndata; 
     msg(); 
    } 
} 

private void msg() 
{ 
    //if (this.InvokeRequired) 
    // this.Invoke(new MethodInvoker(msg)); 
    //else 
    txtget.Text = txtget.Text + Environment.NewLine + " >> " + readData; 
} 
} 
+0

あなたはどのようなエラーが出るのですか?さらに、ページのライフサイクルで長時間実行されるアクションは意味をなさない。 ASP.NETページ内のスレッドは、通常、悪い評価とみなされ、実際には実行したくないスレッドです。覚えておいてください:これはWindowsアプリケーションのように永遠に動作するコードではありません。通常、ページのレンダリングが完了するとすぐに停止されます(asp.netのキーワードページのライフサイクル) – Sascha

+0

あなたが以前に尋ねた質問に対する回答を受け入れることができます –

答えて

0

あなたserverSteamオブジェクトが正しく初期化、したがって、あなたはそれを参照しようとすると、オブジェクトのエラーが発生していません。

あなたはSocketオブジェクトを使用して新しいNetworkSteamを作成し、あなたのSocketオブジェクトが接続されていることを確認する必要があります。

Socket my_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
.. 
// connect socket and any other operations 
.. 
NetworkStream my_network_stream = new NetworkStream(my_socket); 
関連する問題