• TCP返回信号


    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;

    namespace ConsoleApplication1
    {
    class Program
    {
    static void Main(string[] args)
    {
    Server(10086); //监听10086端口
    }

    /// <summary>
    /// 服务器端
    /// </summary>
    /// <param name="port"></param>
    static void Server(int port)
    {
    try
    {
    //1.监听端口
    TcpListener server = new TcpListener(IPAddress.Any, port);
    server.Start();
    Console.WriteLine("{0:HH:mm:ss}->监听端口{1}...", DateTime.Now, port);

    //2.等待请求
    while (true)
    {
    try
    {
    //2.1 收到请求
    TcpClient client = server.AcceptTcpClient(); //停在这等待连接请求
    IPEndPoint ipendpoint = client.Client.RemoteEndPoint as IPEndPoint;
    NetworkStream stream = client.GetStream();

    //2.2 解析数据,长度<1024字节
    string data = string.Empty;
    byte[] bytes = new byte[1024];
    int length = stream.Read(bytes, 0, bytes.Length);
    if (length > 0)
    {
    data = Encoding.Default.GetString(bytes, 0, length);
    Console.WriteLine("{0:HH:mm:ss}->接收数据(from {1}:{2}):{3}", DateTime.Now, ipendpoint.Address, ipendpoint.Port, data);
    }

    //2.3 返回状态
    byte[] messages = Encoding.Default.GetBytes("ok.");
    stream.Write(messages, 0, messages.Length);

    //2.4 关闭客户端
    stream.Close();
    client.Close();
    }
    catch (Exception ex)
    {
    Console.WriteLine("{0:HH:mm:ss}->{1}", DateTime.Now, ex.Message);
    }
    }
    }
    catch (SocketException socketEx)
    {
    //10013 The requested address is a broadcast address, but flag is not set.
    if (socketEx.ErrorCode == 10013)
    Console.WriteLine("{0:HH:mm:ss}->启动失败,请检查{1}端口有无其他程序占用.", DateTime.Now, port);
    else
    Console.WriteLine("{0:HH:mm:ss}->{1}", DateTime.Now, socketEx.Message);
    }
    catch (Exception ex)
    {
    Console.WriteLine("{0:HH:mm:ss}->{1}", DateTime.Now, ex.Message);
    }
    Console.ReadKey();
    }
    }
    }

    2.客户端代码

    复制内容到剪贴板 程序代码
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;

    namespace ConsoleApplication1
    {
    class Program
    {
    static void Main(string[] args)
    {
    Client("192.168.1.100", 10086, "mzwu.com"); //发送数据
    }

    /// <summary>
    /// 客户端
    /// </summary>
    /// <param name="ip"></param>
    /// <param name="port"></param>
    /// <param name="message"></param>
    static void Client(string ip, int port, string message)
    {
    try
    {
    //1.发送数据
    TcpClient client = new TcpClient(ip, port);
    IPEndPoint ipendpoint = client.Client.RemoteEndPoint as IPEndPoint;
    NetworkStream stream = client.GetStream();
    byte[] messages = Encoding.Default.GetBytes(message);
    stream.Write(messages, 0, messages.Length);
    Console.WriteLine("{0:HH:mm:ss}->发送数据(to {1}):{2}", DateTime.Now, ip, message);

    //2.接收状态,长度<1024字节
    byte[] bytes = new Byte[1024];
    string data = string.Empty;
    int length = stream.Read(bytes, 0, bytes.Length);
    if (length > 0)
    {
    data = Encoding.Default.GetString(bytes, 0, length);
    Console.WriteLine("{0:HH:mm:ss}->接收数据(from {1}:{2}):{3}", DateTime.Now, ipendpoint.Address, ipendpoint.Port, data);
    }

    //3.关闭对象
    stream.Close();
    client.Close();
    }
    catch (Exception ex)
    {
    Console.WriteLine("{0:HH:mm:ss}->{1}", DateTime.Now, ex.Message);
    }
    Console.ReadKey();
    }
    }
    }

  • 相关阅读:
    设计模式-工厂模式-场景以及优缺点-目的就是应对变化 (国江面试回答的)
    开启otl的64位长整数支持
    otl翻译(11) -- OTL的迭代器
    OTL翻译(10) -- OTL的流缓冲池
    OTL翻译(9) --常量的SQL语句
    OTL翻译(8) -- otl_long_string/otl_long_unicode_string类
    OTL翻译(7) -- otl_exception类
    OTL翻译(6) -- otl_connect类
    OTL翻译(5) -- otl_stream流相关绑定变量
    OTL翻译(4) -- otl_stream类
  • 原文地址:https://www.cnblogs.com/limitpjz/p/15389800.html
Copyright © 2020-2023  润新知