zoukankan      html  css  js  c++  java
  • 使用 AcceptTcpClientAsync 进行 异步 操作

     转自:https://gist.github.com/jamesmanning/2622054

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                StartListener();
                ConnectAsTcpClient();
                Console.ReadLine();
            }
    
            private static async void ConnectAsTcpClient()
            {
                using (var tcpClient = new TcpClient())
                {
                    Console.WriteLine("[Client] Connecting to server");
                    await tcpClient.ConnectAsync("127.0.0.1", 1234);
                    Console.WriteLine("[Client] Connected to server");
                    using (var networkStream = tcpClient.GetStream())
                    {
                        Console.WriteLine("[Client] Writing request {0}", ClientRequestString);
                        await networkStream.WriteAsync(ClientRequestBytes, 0, ClientRequestBytes.Length);
            
                        var buffer = new byte[4096];
                        var byteCount = await networkStream.ReadAsync(buffer, 0, buffer.Length);
                        var response = Encoding.UTF8.GetString(buffer, 0, byteCount);
                        Console.WriteLine("[Client] Server response was {0}", response);
                    }
                }
            }
    
            private static readonly string ClientRequestString = "Some HTTP request here";
            private static readonly byte[] ClientRequestBytes = Encoding.UTF8.GetBytes(ClientRequestString);
    
            private static readonly string ServerResponseString = "<?xml version="1.0" encoding="utf-8"?><document><userkey>key</userkey> <machinemode>1</machinemode><serial>0000</serial><unitname>Device</unitname><version>1</version></document>
    ";
            private static readonly byte[] ServerResponseBytes = Encoding.UTF8.GetBytes(ServerResponseString);
    
            private static async void StartListener()
            {
                var tcpListener = TcpListener.Create(1234);
                tcpListener.Start();
                var tcpClient = await tcpListener.AcceptTcpClientAsync();
                Console.WriteLine("[Server] Client has connected");
                using (var networkStream = tcpClient.GetStream())
                {
                    var buffer = new byte[4096];
                    Console.WriteLine("[Server] Reading from client");
                    var byteCount = await networkStream.ReadAsync(buffer, 0, buffer.Length);
                    var request = Encoding.UTF8.GetString(buffer, 0, byteCount);
                    Console.WriteLine("[Server] Client wrote {0}", request);
                    await networkStream.WriteAsync(ServerResponseBytes, 0, ServerResponseBytes.Length);
                    Console.WriteLine("[Server] Response has been written");
                }
            }
        }
    }
  • 相关阅读:
    Bone Collector II(背包 求第k优解)
    How Many Answers Are Wrong (彻底理解带权并查集)
    System Testing(Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round))D
    Rikka with Minimum Spanning Trees徐州区域赛a题
    cin加速语句
    牛客练习赛41 b 666RPG (01背包)
    js字符串拼接优化
    nodejs中使用递归案例
    thunk的主要用法
    $in的方法总结
  • 原文地址:https://www.cnblogs.com/wyt007/p/8857261.html
Copyright © 2011-2022 走看看