2009-12-21 61 views
1

在我連接到服務器後,我再次單擊連接按鈕我得到SocketException在clientSocket.Connect(「127.0.0.1」,8888)上未處理;如何解決這個問題?SocketException是未處理的

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

回答

1

您不能連接clientSocket多次。當你第二次點擊按鈕時你期望發生什麼?

您可以檢查套接字的狀態,如果它已連接,則不要嘗試其他連接。或者把一些異常處理。

相關問題