2009-12-18 62 views
-2

上一個問題(我沒有連接到我的服務器,我在發送文本中鍵入了一些文本,然後按發送,我的程序中將顯示一條警告serverStream.Write(outStream, 0, outStream.Length); NullreferenceException未處理。 直到我插入這個編碼我按消息發送後不顯示我的消息

if (serverStream == null) 
     MessageBox.Show("Please connect to a server first!"); 
     return; 

但之後我插入代碼,我的消息不顯示在我按下發送

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Net.Sockets; 
using System.Threading; 

namespace SocketClient 
{ 

    public partial class SocketClient : Form 
    { 
     System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); 
     NetworkStream serverStream = default(NetworkStream); 
     string readData = null; 


     public SocketClient() 
     { 
      InitializeComponent(); 
     } 


     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 
       textDisplay.Text = textDisplay.Text + Environment.NewLine + " >> " + readData; 
     } 


     private void buttonConnect_Click(object sender, EventArgs e) 
     { 
      readData = "Conected to NYP Chat Server ..."; 
      msg(); 
      clientSocket.Connect("127.0.0.1", 8888); 
      serverStream = clientSocket.GetStream(); 

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

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


     private void buttonSend_Click(object sender, EventArgs e) 
     { 
      // Show msg box if no server is connected 
      if (serverStream == null) 
       MessageBox.Show("Please connect to a server first!"); 
       return; 


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

      // Clear text 
      textSend.Text = ""; 


     } 

     private void textDisplay_TextChanged(object sender, EventArgs e) 
     { 
      textDisplay.SelectionStart = textDisplay.Text.Length; 
      textDisplay.ScrollToCaret(); 
      textDisplay.Refresh(); 
     } 

     private void textSend_TextChanged(object sender, EventArgs e) 
     { 
      buttonSend.Enabled = !string.IsNullOrEmpty(textSend.Text); 
     } 
    } 
} 
+4

請了解如何編程,而不是要求我們爲您做所有事情。 – SLaks 2009-12-18 03:47:26

回答

3

你忘了周圍的if聲明括號。

因此,if僅適用於MessageBox調用,並且return語句無論如何都執行。

將其更改爲

if (serverStream == null) { 
    MessageBox.Show("Please connect to a server."); 
    return; 
} 
+1

我有dejávu的感覺。 – 2009-12-18 03:51:33

+0

好的謝謝,解決了 – 2009-12-18 03:53:47

+0

@Martinho:我並不感到驚訝。 :-) – SLaks 2009-12-18 03:56:45

0

你需要把花括號{}在你的if語句。沒有它們,只有if的第一行在if語句中被執行。這意味着你的回報總是被調用。