How To Create A Client Server Application In Minutes[如何在几分钟的时间里编写一个客户机/服务器控制台程序]

前言

    本文全文翻译http://www.networkcomms.net/how-to-create-a-client-server-application-in-minutes/

Are you trying to develop a client server application but are coming up against all sorts of problems? We certainly did and that’s why we developed NetworkComms.Net. You can follow this quick tutorial to create a client server application in just several minutes.

译:你如果在开发一个客户服务器程序时会遇到各种各样的问题,但是用NetworkComms.Net,按下面的操作教程只要几分钟就完事了,这也是我们提供这个组件的原因:省力。


If you are looking for something a little more advanced please also see  how to create a WPF client server chat application. Please also checkout our features section to find out just how powerful our network library is.

译:在"WPF client server chat application"这个例子中有更强大的功能,你会通过这个例子感受到我们的network library 是多么的powerful。


Before we get started ensure you have one of the NetworkComms.Net packages (if not please see our download page) and Visual Studio 2010 Express or later installed, which should come with .Net4 or later.

译:在我们开工之前,需要有NetworkComms.Net包和VS2010环境。没有这两个,请下载打造好。

1. Create Visual Studio Projects
•Create a new visual studio solution named ‘ ClientServerExample  ‘ containing a Visual C# ‘ Console Application  ‘ project naming it ‘ ClientApplication  ‘.
•Once created add a second Visual C# ‘ Console Application  ‘ project naming it ‘ ServerApplication  ‘.
•You should now have something that looks like this:
译:打开VS2010,创建一个空解决方案名字叫"ClientServerExample",然后为它添加一个名为"ClientApplication"的C#控制台应用程序。接着添加第二个名为"ServerApplication"的C#控制台应用程序。上述几步完成后,如下图所示。

2. Add NetworkComms.Net DLL To Projects
•The NetworkComms.Net download contains DLLs for all supported platforms but we are only interested in the Net40 > Release > Complete DLL. Copy this DLL to the same location as the solution we created in step 1.
•We now need to add project references to the NetworkComms.Net DLL we just downloaded. Right click on the ‘ ClientApplication  ‘ project and select ‘ Add Reference…  ‘. Within the window that opens select the Browse tab and select the DLL we just downloaded. Repeat this step for the ‘ ServerApplication  ‘ project.
•If you expand the ‘ References  ‘ folder within both projects you should see the NetworkComms.Net references you just added like this:

译: 第2步,将DLL加进到工程中

•将 Net40 > Release > Complete下的DLL文件拷到解决方案所在的目录

•右击 ‘ ClientApplication  ‘ project and select ‘ Add Reference…  ‘,在“浏览”tab页,找到DLL文件,完成添加引用。同样的对‘ ServerApplication  ‘也这样操作。


3. Copy & Paste Client Source Code
•Copy and paste the following code into the ‘ ClientApplication  ‘ project replacing ALL EXISTING code in the file ‘ Program.cs  ‘. Note the highlighted line which is the only line required to actually send an object to the server.

译:将Client方案的Program.cs中的所有代码用下述代码替换。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NetworkCommsDotNet;

namespace ClientApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            //Request server IP and port number
            Console.WriteLine("Please enter the server IP and port in the format 192.168.0.1:10000 and press return:");
            string serverInfo = Console.ReadLine();  //读取

            //Parse the necessary information out of the provided string
            string serverIP = serverInfo.Split(':').First();  //获得服务端的IP
            int serverPort = int.Parse(serverInfo.Split(':').Last());  //获得服务端程序的端口

            //Keep a loopcounter
            int loopCounter = 1;   //一个计数变量
            while (true)   //永远循环
            {
                //Write some information to the console window
                string messageToSend = "This is message #" + loopCounter;  //发送给服务端的信息
                Console.WriteLine("Sending message to server saying '" + messageToSend + "'");

                //Send the message in a single line
                NetworkComms.SendObject("Message", serverIP, serverPort, messageToSend);  //向IP为...端口为...的服务端程序发送messageToSend信息,请注意语句中的  "Message"

                //Check if user wants to go around the loop
                Console.WriteLine("\nPress q to quit or any other key to send another message.");
                if (Console.ReadKey(true).Key == ConsoleKey.Q) break;    //如果你按下的是q键,则这个死循环就跳出;按下的非q键,则向服务器发送一次信息。
                else loopCounter++;
            }

            //We have used comms so we make sure to call shutdown
            NetworkComms.Shutdown();
        }
    }
}

4. Copy & Paste Server Source Code
•Copy and paste the following code into the ‘ ServerApplication  ‘ project replacing ALL EXISTING code in the file ‘ Program.cs  ‘. Note the highlighted lines which is all that is required to setup the server.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NetworkCommsDotNet;
using NetworkCommsDotNet.Connections;

namespace ServerApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            //Trigger the method PrintIncomingMessage when a packet of type 'Message' is received
            //We expect the incoming object to be a string which we state explicitly by using <string>


            NetworkComms.AppendGlobalIncomingPacketHandler<string>("Message", PrintIncomingMessage);
            //注意上句的Message,这个在客户端程序中也有这个单词,还要注意这个PrintIncomingMessage,这是一个线程处理函数,见下面,功能是获取连接者发来的信号,并处理。


            //Start listening for incoming connections //开始监听
            Connection.StartListening(ConnectionType.TCP, new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0));

            //Print out the IPs and ports we are now listening on  //服务端程序将自己的所有的ip与端口输出显示出来,这些ip和端口,客户机程序要使用!
            Console.WriteLine("Server listening for TCP connection on:");
            foreach (System.Net.IPEndPoint localEndPoint in Connection.ExistingLocalListenEndPoints(ConnectionType.TCP))
                Console.WriteLine("{0}:{1}", localEndPoint.Address, localEndPoint.Port);//显示的信息如下图2所示





            //Let the user close the server   //如果服务端程序在运行时,操作者按下了任意键,则服务端程序会并闭退出。
            Console.WriteLine("\nPress any key to close server.");
            Console.ReadKey(true);

            //We have used NetworkComms so we should ensure that we correctly call shutdown
            NetworkComms.Shutdown();
        }

        /// <summary>
        /// Writes the provided message to the console window
        /// </summary>
        /// <param name="header">The packet header associated with the incoming message</param>
        /// <param name="connection">The connection used by the incoming message</param>
        /// <param name="message">The message to be printed to the console</param>
        private static void PrintIncomingMessage(PacketHeader header, Connection connection, string message)
        {
            Console.WriteLine("\nA message was received from " + connection.ToString() + " which said '" + message + "'.");
        //将某位客户机发来的信息显示出来。例如有3台客户机连到这个服务器,每一台发来的信息不一样,则都在这里处理

        }
    }
}



图2       服务端程序运行后,显示11404,11405,11406,11407这些端口








深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值