在网络上读取文件
在C++中,在网络上读取文件需要有相当的编程技巧,.NET对此提供了广泛的支持。事实上,在网络上读取文件仅仅是基础类库中Stream类的另一种应用。
首先,为了对TCP/IP端口(在本例中是65000)进行监听,我们需要创建一个TCPListener类的实例。
TCPListenertcpListener=newTCPListener(65000);
一旦创建后,就让它开始进行监听。
tcpListener.Start();
现在就要等待客户连接的要求了。
SocketsocketForClient=tcpListener.Accept();
TCPListener对象的Accept方法返回一个Socket对象,Accept是一个同步的方法,除非接收到一个连接请求它才会返回。如果连接成功,就可以开始向客户发送文件了。
if(socketForClient.Connected)
{
???
接下来,我们需要创建一个NetworkStream类,将报路传递给constructor:
NetworkStreamnetworkStream=newNetworkStream(socketForClient);
然后创建一个StreamWriter对象,只是这次不是在文件上而是在刚才创建的NetworkStream类上创建该对象:
System.IO.StreamWriterstreamWriter=
newSystem.IO.StreamWriter(networkStream);
当向该流写内容时,流就通过网络被传输给客户端。
客户端的创建
客户端软件就是一个TCPClient类的具体例子,TCPClient类代表连向主机的一个TCP/IP连接。
TCPClientsocketForServer;
socketForServer=newTCPClient("localHost",65000);
有了TCPClient对象后,我们就可以创建NetworkStream对象了,然后在其上创建StreamReader类:
NetworkStreamnetworkStream=socketForServer.GetStream();
System.IO.StreamReaderstreamReader=
newSystem.IO.StreamReader(networkStream);
现在,只要其中有数据就读取该流,并将结果输出到控制台上。
do
{
outputString=streamReader.ReadLine();
if(outputString!=null)
{
Console.WriteLine(outputString);
}
}
while(outputString!=null);
为了对这一段代码进行测试,可以创建如下一个测试用的文件:
Thisislineone
Thisislinetwo
Thisislinethree
Thisislinefour
这是来自服务器的输出:
Output(Server)
Clientconnected
SendingThisislineone
SendingThisislinetwo
SendingThisislinethree
SendingThisislinefour
Disconnectingfromclient...
Exiting...