刚刚开始学习网络编程,做了一个服务器,和一个客户端对传数据
这是服务器的代码:
TcpListener listener = new TcpListener(60000);
listener.Start();
while (true)
{
Socket mySocket = listener.AcceptSocket();
NetworkStream ns = new NetworkStream(mySocket);
StreamReader sr = new StreamReader(ns);
string[] strRec = sr.ReadLine().Split(' ');
string command = strRec[0] + textBox2.Text;
byte[] message = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray());
mySocket.Send(message);
string endstring = "\r\n";
byte[] endmessage = System.Text.Encoding.ASCII.GetBytes(endstring.ToCharArray());
mySocket.Send(endmessage);
}客户端的代码:
TcpClient myClient = new TcpClient(127.0.0.1,60000);
NetworkStream ns = null;
string message = textBox4.Text + "\r\n";
byte[] sendmessage = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
ns = myClient.GetStream();
StreamReader sr = new StreamReader(ns);
ns.Write(sendmessage, 0, sendmessage.Length);
string text = "";
while (true)
{
text = sr.ReadLine();
if(text.Equals(""))
{
break;
}
textBox1.Text = text;
}
myClient.Close();运行得不到我要的结果,追踪调试发现,服务器能接收到客户端发的数据,但是客户端接收不到服务器发出的数据,text = sr.ReadLine()读的是空值,哪位大哥帮我看看,是哪出了问题啊
这是服务器的代码:
TcpListener listener = new TcpListener(60000);
listener.Start();
while (true)
{
Socket mySocket = listener.AcceptSocket();
NetworkStream ns = new NetworkStream(mySocket);
StreamReader sr = new StreamReader(ns);
string[] strRec = sr.ReadLine().Split(' ');
string command = strRec[0] + textBox2.Text;
byte[] message = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray());
mySocket.Send(message);
string endstring = "\r\n";
byte[] endmessage = System.Text.Encoding.ASCII.GetBytes(endstring.ToCharArray());
mySocket.Send(endmessage);
}客户端的代码:
TcpClient myClient = new TcpClient(127.0.0.1,60000);
NetworkStream ns = null;
string message = textBox4.Text + "\r\n";
byte[] sendmessage = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
ns = myClient.GetStream();
StreamReader sr = new StreamReader(ns);
ns.Write(sendmessage, 0, sendmessage.Length);
string text = "";
while (true)
{
text = sr.ReadLine();
if(text.Equals(""))
{
break;
}
textBox1.Text = text;
}
myClient.Close();运行得不到我要的结果,追踪调试发现,服务器能接收到客户端发的数据,但是客户端接收不到服务器发出的数据,text = sr.ReadLine()读的是空值,哪位大哥帮我看看,是哪出了问题啊
{
text = sr.ReadLine();
if(text.Equals(""))
{
break;
}
textBox1.Text += text;
}
{
//text可能读到的为null,这时调用Equals方法就会出现异常{"未将对象引用设置到对象的实例。"},改成下面这样就可以了
text = sr.ReadLine();
if (text==null)
{
break;
}
textBox1.Text += text;
}
{
}进行判断来试试
listener.Start();
while (true)
{
using (TcpClient ac = listener.AcceptTcpClient())
{
NetworkStream ns = ac.GetStream();
MemoryStream dest = new MemoryStream();
int n;
byte[] buffer = new byte[4096];
while (ns.DataAvailable && (n = ns.Read(buffer, 0, buffer.Length)) >= 0)
dest.Write(buffer, 0, n);
string[] strRec = Encoding.UTF8.GetString(dest.ToArray()).Split(' ');
string command = strRec[0] + textBox2.Text;
buffer = Encoding.UTF8.GetBytes(command);
ns.Write(buffer, 0, buffer.Length);
}
}和
using (TcpClient myClient = new TcpClient("127.0.0.1", 60000))
{
NetworkStream ns = myClient.GetStream();
new StreamWriter(ns).Write(textBox4.Text);
textBox1.Text = new StreamReader(ns).ReadToEnd();
}
实际上,业务服务程序最好完全使用异步的操作,以免因为个别操作延迟影响其它任务。而且,服务器端程序通常也需要注意捕获和处理异常。