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");
                }
            }
        }
    }
  • 相关阅读:
    初学 python 之 多级菜单实现原理
    初学 python 之 用户登录实现过程
    Sqlmap使用教程
    对伪静态网站实施注射
    干货!IT小伙伴们实用的网站及工具大集合!持续更新!
    lnmp、lamp、lnmpa一键安装包(Updated: 2016-4-12)
    如何入门 Python 爬虫?
    在Windows Live Writer中插入C# code
    IIS装好后,局域网不能访问
    修改win7登录界面
  • 原文地址:https://www.cnblogs.com/wyt007/p/8857261.html
Copyright © 2011-2022 走看看