按下发送后我的消息不显示

时间:2009-12-18 03:42:49

标签: c#

以前的问题(我没有连接到我的服务器,我在发送文本中键入了一些文本并按下发送,我的程序中会显示警告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);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

你忘了在if陈述周围加上大括号。

因此,if仅适用于MessageBox调用,并且return语句无论如何都会执行。

将其更改为

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

答案 1 :(得分:0)

你需要在if语句周围添加花括号{}。没有它们,只有if的第一行在if语句中执行。这意味着您的回程始终被调用。