2012-01-04 45 views
0

我试图在asp.net中使用C#中的套接字。使用套接字在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 2012-01-04 07:35:46

+0

您可能想要接受针对您以前提出的问题的一些答案 – 2012-01-04 10:31:09

回答

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);