我被要求用C#编写一个客户端/服务器应用程序,并且已经完成了半完成的代码。
它使用ThreadPool
和TcpListener
与StreamReader
和StreamWriter
类进行数据传输。客户端有一个工作目录,已修复。服务器也有一个,但可以更改。
基本上,您使用switch语句在客户端上键入选项,服务器处理该选项并将其发送回客户端。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Security.Cryptography;
namespace Client
{
/// <summary>
/// Remote File Service client
/// </summary>
class Client
{
/// <summary>
/// Static entry point to client code
/// </summary>
/// <param name="args">unused</param>
static void Main(string[] args)
{
string dir = @"c:\st12_13d1_files";
try
{
Directory.SetCurrentDirectory(dir);
}
catch (DirectoryNotFoundException e)
{
Console.WriteLine("The specified directory does not exist. {0}", e);
}
try
{
using (TcpClient client = new TcpClient("localhost", 50012))
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.AutoFlush = true;
string option;
do
{
Console.WriteLine("-Menu-\n");
Console.WriteLine("1-Print out file names-\n");
Console.WriteLine("2-Current Working Directory-\n");
Console.WriteLine("3-Files Present on the Server-\n");
Console.WriteLine("4- List of Subdirectory Names-\n");
Console.WriteLine("5- Change Server Directory Location-\n");
Console.WriteLine("6-Copy the contents of a file specified-\n");
Console.WriteLine("7-Close-\n");
Console.WriteLine("Please enter your choice: ");
option = Console.ReadLine();
switch (option)
{
case "1":
case "one":
Console.WriteLine("You have selected Print out file names: ");
break;
}
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Threading;
using System.Security.Cryptography;
namespace Server
{
/// <summary>
/// Remote File Service main functionality
/// </summary>
public class ServerMainline
{
public ServerMainline()
{
/*
* *** TO DO - your code goes here ***
* record initial current working directory value in a global variable
*/
string serv = (@"..\..");
try
{
//Set the current directory.
Directory.SetCurrentDirectory(serv);
}
catch (DirectoryNotFoundException e)
{
Console.WriteLine("The specified directory does not exist. {0}", e);
}
TcpListener server = null;
try
{
ThreadPool.SetMaxThreads(50, 50);
server = new TcpListener(IPAddress.Any, 50012);
server.Start();
while (true)
{
Console.WriteLine("Waiting for a new Client...");
TcpClient client = server.AcceptTcpClient();
ThreadPool.QueueUserWorkItem(serviceClient, client);
}
}
catch (Exception e)
{
Console.WriteLine("Server mainline: SocketException: {0}", e);
}
finally
{
server.Stop();
server.Server.Close();
}
}
/// <summary>
/// method to run to handle each client on separate thread
/// </summary>
void serviceClient(object clientObject)
{
Thread currentThread = Thread.CurrentThread;
int threadID = currentThread.GetHashCode();
try
{
using (TcpClient client = (TcpClient)clientObject)
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.AutoFlush = true;
Console.WriteLine("Connected with a client, threadID: {0}", threadID);
string option = reader.ReadLine();
while (option != "7")
switch (option)
{
case "1":
case "one":
string[] myfiles = Directory.GetFiles(@"c:\st12_13d1_files");
Console.WriteLine("File Names {0}",Directory.GetFiles
(@"c:\st12_13d1_files"));
foreach (string file in myfiles)
{
//Console.WriteLine(file);
Console.WriteLine(Path.GetFileName(file));
writer.WriteLine(myfiles);
}
break;
}
答案 0 :(得分:3)
在充分尊重的情况下,我认为让别人为您完成家庭作业不合适。
作为一名学生,研究应该是你的工作(网上有许多TCP套接字演示和教程)并尝试使用多种解决方案,然后再向其他人寻求帮助。
软件开发既是艺术,也是科学,它要求你花时间练习艺术。通过阅读书籍和让别人为你工作,你无法学会成为一名出色的程序员。
投票结束。
更新:不想成为一个完整的curmudgeon,这里有一些教程的链接,可以帮助你真正掌握异步TCP /套接字编程: