【发布时间】:2016-07-20 13:23:36
【问题描述】:
我正在尝试制作一个可以在彼此之间来回读取和写入信息的客户端和服务器。我可以从客户端写入,服务器读取它,但反之亦然,我不知道为什么。这里似乎没有人知道我之前什么时候问过,而且我在网上找不到任何有效的东西。如果你知道,请告诉我,不要告诉我去阅读有关 TCP 的文章,因为它根本没有帮助。
客户:
namespace ExampleClient
{
public partial class Form1 : Form
{
public static bool IsConnected;
public static NetworkStream Writer;
public static NetworkStream Receiver;
public Form1()
{
InitializeComponent();
}
private void BtnConnect_Click(object sender, EventArgs e)
{
TcpClient Connector = new TcpClient();
Connector.Connect(TxtIP.Text, Convert.ToInt32(TxtPort.Text));
IsConnected = true;
Writer = Connector.GetStream();
Console.WriteLine("Connected");
System.Threading.Thread Rec = new System.Threading.Thread(new System.Threading.ThreadStart(Receive));
Rec.Start();
}
private void BtnWrite_Click(object sender, EventArgs e)
{
try{
byte[] Packet = Encoding.ASCII.GetBytes("Client Write Test");
Writer.Write(Packet, 0, Packet.Length);
Writer.Flush();}
catch{
try { Writer.Close();} catch { }}
}
public static void Receive()
{
while (true){
try{
byte[] RecPacket = new byte[1000];
Receiver.Read(RecPacket, 0, RecPacket.Length);
Receiver.Flush();
string Message = Encoding.ASCII.GetString(RecPacket);
MessageBox.Show(Message);
}
catch { break;}
}
}
}
}
接收方/服务器:
namespace ExampleServer
{
public partial class Form1 : Form
{
public static NetworkStream Writer;
public static NetworkStream Receiver;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
TcpListener Server = new TcpListener(2002);
Server.Start();
TcpClient Connection = Server.AcceptTcpClient();
Receiver = Connection.GetStream();
System.Threading.Thread Rec = new System.Threading.Thread(new System.Threading.ThreadStart(Receive));
Rec.Start();
}
public static void Receive()
{
while (true)
{
try
{
byte[] RecPacket = new byte[1000];
Receiver.Read(RecPacket, 0, RecPacket.Length);
Receiver.Flush();
string Message = Encoding.ASCII.GetString(RecPacket);
MessageBox.Show(Message);
try{
byte[] Packet = Encoding.ASCII.GetBytes("Server Write Test");
Writer.Write(Packet, 0, Packet.Length);
Writer.Flush();}
catch{
try { Writer.Close(); } catch { }}
}
catch { break; }
}
}
}
}
因此,当服务器从客户端读取消息时,它会显示它工作正常,但是当它向客户端写回消息时,它会崩溃并出现错误“system.nullreferenceeexception: object reference not set to an instance一个对象。在 exampleserver.form1.receive()"。
【问题讨论】:
-
你究竟是从哪里得到 NullReferenceException 的?
-
不,我知道空引用是什么,我不知道为什么它在这里给我这个错误并告诉我学习如何修复空引用根本不会帮助我。我需要专门针对我的示例的帮助
-
当服务器应用程序在“byte[] packet.... 和 writer.flush()”之间发送消息时,我收到了该错误
-
这就是调试器的用途。我建议您彻底阅读链接问题的最佳答案并应用其中的信息。如果你不能确切地告诉我哪些对象是空的,那么你还没有完全应用帖子中的信息
标签: c# sockets tcp tcpclient networkstream