我开始涉足网络编程领域,最近我遇到了一个相当老的例子,来自讲师教程(或者我听说是这样)。
急于找到原因,我决定在家里自己的电脑上运行相同的代码,毫不奇怪,它不起作用。
解决方案中有两个项目,一个作为客户机,另一个作为服务器。一旦服务器和客户机都彼此连接,客户机就会向服务器发送一个简单的字符串,并将其打印到控制台。在此之后,相应的连接关闭,应用程序正常退出。
应用程序工作到服务器确认它已连接到客户机,但它抛出一个异常(捕获并处理),文本如下:
无法从传输连接读取数据:远程主机已强制关闭现有连接。- (System.IO.IOException异常)
现在我刚开始用C语言进行网络编程,我不太清楚该去哪里找,我的讲师说他会在下周的讲座中找出问题的原因和解决方法,但我想采取一些主动行动,找出我自己。
我添加了客户端.cs以及服务器.cs类,以防它们有帮助,调试器建议原因位于中的第27行服务器.cs,呼叫streamReader.Readline文件();
:这根本不是家庭作业,我只是好奇为什么它不起作用。称之为学习体验=]
客户端.cs
using System;
using System.Net.Sockets;
using System.IO;
namespace NetworkProgrammingTutorial1Client
{
class Client
{
static void Main(string[] args)
{
TcpClient myclient;
try
{
// Create a TcpClient to talk to the local host.
myclient = new TcpClient("localhost", 1234);
}
catch
{
Console.WriteLine("Failed to connect to the server.");
return;
}
// get a Network stream from the server
NetworkStream networkStream = myclient.GetStream();
StreamWriter streamWriter = new StreamWriter(networkStream);
streamWriter.WriteLine("Have a message.");
streamWriter.Flush();
}
}
}
服务器.cs
using System;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace NetworkProgrammingTutorial1Server
{
class Server
{
static void Main(string[] args)
{
// TcpListener is listening on the given port... {
TcpListener tcpListener = new TcpListener(1234);
tcpListener.Start();
Console.WriteLine("Server Started") ;
// Accepts a new connection...
Socket socketForClient = tcpListener.AcceptSocket();
try
{
if (socketForClient.Connected)
{
while (true)
{
Console.WriteLine("Client connected");
NetworkStream networkStream = new NetworkStream(socketForClient);
StreamReader streamReader = new StreamReader(networkStream);
string line = streamReader.ReadLine();
if (line == null)
break;
Console.WriteLine(line);
}
}
socketForClient.Close();
Console.WriteLine("Exiting...");
}
catch(Exception e)
{
Console.WriteLine(e.ToString()) ;
}
}
}
}