2009-12-17 3 views
0
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) 
     { 
      // send text 
      byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textSend.Text + "$"); 
      serverStream.Write(outStream, 0, outStream.Length); 
      serverStream.Flush(); 
      //clear textsend textbox 
      textSend.Text = ""; 

     } 

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

답변

2

이 이벤트 처리기를 텍스트 상자의 TextChanged 이벤트에 할당하고 처음에 단추의 Enabled 속성을 false로 설정합니다.

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

형제 다시 한 번 감사, 또 다른 qns 내가 내 서버에 연결 보내기 텍스트 N 보도 보내기에 텍스트를 입력하고 있지 않다 경우는 (outStream 내 프로그램 "serverStream.Write에 표시하는 경고가 될 것입니다 , 0, outStream.Length); " << NullreferenceException 처리되지 않았습니다. 이 경고가 표시되는 것을 막기 위해 어쨌든 있습니까? –

+0

'serverStream'이 null 참조인지 확인하십시오. – dtb

+0

어떻게 해야할지, 미안하지만 좀 멍청한데 –

관련 문제