所以,我很新的這一切的網絡編程,我有幾個問題...在處理Streams時C#中的NullReferenceException?
我建立一個客戶端 - 服務器聊天應用程序,其中,服務器運行,客戶端(S)連接到服務器,然後當客戶端向服務器發送消息時,服務器將其中繼到所有客戶端。該服務器是一個控制檯應用程序,並且該客戶端是一個Windows窗體應用程序。
我得到的錯誤是在我的客戶端中,在我的表單的最頂端,我有一個文本框以接收用戶的名稱和一個按鈕來「提交」它並使用該用戶名連接到服務器。
不管怎麼說,這是我的按鈕連接代碼:
private void btnConnect_Click(object sender, EventArgs e)
{
readData = "Connecting to chat server...";
msg();
try
{
sck_client.Connect("127.0.0.1", 8888);
sw = new StreamWriter(sck_client.GetStream());
string toSend = txtUsername.Text;
sw.Write(toSend);
sw.Flush();
chatThread = new Thread(GetMessages);
chatThread.Start();
}
catch (Exception ex)
{
readData = ex.ToString();
msg();
}
}
MSG()很簡單,發生在READDATA值,並將其打印到屏幕(在RichTextBox)。 sw是一個在方法之外公開聲明的streamwriter,sck_client(一個TcpClient)和chatThread(一個Thread)也是如此。
基本上,問題是,當我運行我的程序並嘗試連接時,它會拋出Exception ex,就好像它無法連接。它拋出一個NullReferenceException與文本:
System.NullReferenceException:對象引用未設置爲對象的實例 。在Chat_Client.Main.btnConnect_Click(對象發件人, 的EventArgs e)在文件路徑\ Chat_Client \ Main.cs:line36
,即使我的服務器是否正在運行並偵聽端口8888。所以發生,我應該怎麼辦要解決這個問題?
如果您需要更多我的代碼來解決問題,請在評論中告訴我,我會發布它。
若要顯示代碼實例:
public partial class Main : Form // new class for the form itself
{
// all of these are declared outside any method:
TcpClient sck_client = default(TcpClient);
Thread chatThread = default(Thread);
string readData = null;
StreamWriter sw = default(StreamWriter);
StreamReader sr = default(StreamReader);
...
哪一個是36行? –
第36行和周圍的一切都會很好。 –
你在'msg()'中做什麼,在第一次調用sw中可能會無效,因爲它在代碼中稍後被初始化? – V4Vendetta