2009-12-18 4 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

답변

3

당신은 if 문 주위에 괄호를 넣어 잊었 보내 누른 후 표시되지 않습니다.

따라서 ifMessageBox 호출에만 적용되며 return 문은 관계없이 실행됩니다.

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

나는 데 자부 감을 가지고있다. –

+0

ok thanks, solve –

+0

@Martinho : 놀랄 일이 아닙니다. :-) – SLaks

0

변경은 당신은 당신의 if 문 주위에 중괄호 {} 넣을 필요가있다. 그것들이 없으면 if의 첫 번째 줄만 if 문 안에서 실행됩니다. 이것은 귀하의 수익이 항상 부름 받고 있음을 의미합니다.

관련 문제