SocketException未处理

时间:2009-12-21 04:12:32

标签: c#

我连接到服务器后,再次单击连接按钮,我在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 个答案:

答案 0 :(得分:1)

您不能多次连接clientSocket。第二次单击按钮时,您期望发生什么?

您可以检查套接字的状态,如果已连接,则不要尝试其他连接。或者在中进行一些异常处理。