zoukankan      html  css  js  c++  java
  • 使用TCP的HelloServer

    HelloServer是一个在1234端口监听的服务端程序,它接受客户送来的数据,并且把这些数据解释为响应的ASCII字符,再对客户做出类似“Hello,...!"这样的响应。以下是HelloServer的代码。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    namespace HelloServer
    {
        class Program
        {
            static void Main(string[] args)
            {
                string host = "localhost";
                IPAddress ip = Dns.Resolve(host).AddressList[0];
                int port = 1234;
                TcpListener lst = new TcpListener(ip,port);
                //开始监听
                lst.Start();
    
                //进入等待客户的无限循环
                while (true)
                {
                    Console.Write("等待连接。。。。");
                    TcpClient c = lst.AcceptTcpClient();
    
                    Console.WriteLine("客户已连接");
                    NetworkStream ns = c.GetStream();
                    //获取客户发来的数据
                    byte [] request = new byte[512];
                    int bytesRead = ns.Read(request, 0, request.Length);
                    string input = Encoding.ASCII.GetString(request, 0, bytesRead);
    
                    Console.WriteLine("客户请求:{0}",input);
                    
                    //构造返回数据
                    string output = "Hello, " + input + "!";
                    byte[] hello = Encoding.ASCII.GetBytes(output);
                    try
                    {
                        ns.Write(hello,0,hello.Length);
                        ns.Close();
                        c.Close();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                    }
                }
                lst.Stop();
            }
        }
    }

    编译之后运行,程序会显示如下:

    输出结果

    等待连接。。。。

    这时服务程序已经进入了等待连接的循环。如果不关闭控制台端口,这个程序会一直等待。

    现在编写客户端程序HelloClient,客户端代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Sockets;
    using System.Text;
    
    namespace HelloClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    string host = "localhost";
                    int port = 1234;
                    TcpClient c = new TcpClient(host,port);
                    NetworkStream ns = c.GetStream();
                    //构造请求数据
                    string output = "reader";
                    byte[] name = Encoding.ASCII.GetBytes(output);
                    ns.Write(name,0,name.Length);
                    byte [] response = new byte[1024];
                    //读取服务器响应
                    int bytesRead = ns.Read(response, 0, response.Length);
                    Console.WriteLine(Encoding.ASCII.GetString(response,0,bytesRead));
                    c.Close();
                }
                catch (Exception e)
                {
                    
                    Console.WriteLine(e.ToString());
                }
            }
        }
    }

    输出结果

    Hello,Reader!

    而在服务端,输出变成了

    输出结果

    等待连接。。。。客户已连接

    客户请求:Reader

    等待连接。。。。

     

    记住先开启服务端,在开启客户端的请求。不然会报错!

    截图看运行结果

  • 相关阅读:
    Redis计数信号量
    一台服务器能支撑多少个TCP连接
    Python常见字符编码间的转换
    浅谈HttpDNS
    用Python写的一个MySQL数据库监测系统
    用Python写的一个MySQL数据库监测系统
    how tomcat works(第九章)
    how tomcat works(第八章)
    how tomcat works(第八章)
    how tomcat works(第九章)
  • 原文地址:https://www.cnblogs.com/jianrong-zheng/p/3442838.html
Copyright © 2011-2022 走看看