c# 使用Socket异步接收TCP数据

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

namespace TCP_DEMO_Recv2 {

    static class Program {

        public static string Tcpport = "5021";

        static void Main(string[] args) {

            InitTcp_Sync();

            Console.ReadKey();
        }

        #region TCP

        // ReSharper disable once FunctionRecursiveOnAllPaths
        public static void InitTcp_Sync() {

            try {

                var sip = Expand.GetIp;
                var sprot = int.Parse(Tcpport);

                Log(LogType.Open, "TCP Servise IP." + sip);
                Log(LogType.Open, "TCP Servise Port." + sprot);

                var ipEnd = new IPEndPoint(IPAddress.Any, sprot);

                using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
                    socket.Bind(ipEnd);
                    socket.Listen(10);

                    Log(LogType.Open, "Waiting for a client");

                    using (var client = socket.Accept()) {

                        var ipEndClient = (IPEndPoint)client.RemoteEndPoint;

                        var cip = ipEndClient.Address;
                        var cport = ipEndClient.Port;

                        Log(LogType.Recv, "IPEndPoint.IP = " + cip);
                        Log(LogType.Recv, "IPEndPoint.Port = " + cport);

                        var data = Encoding.Default.GetBytes("connection succeeded");
                        client.Send(data, data.Length, SocketFlags.None);

                        while (true) {
                            data = new byte[1024];
                            var recv = client.Receive(data);
                            if (recv == 0) break;

                            Log(LogType.Recv, Encoding.Default.GetString(data, 0, recv));
                            client.Send(data, recv, SocketFlags.None);
                            Log(LogType.Send, Encoding.Default.GetString(data, 0, recv));
                        }

                        Log(LogType.Open, $"Disconnect form {cip}:{cport}");

                    }

                }

                InitTcp_Sync();

            } catch (Exception ex) {

                Log(LogType.Error, ex.Message);
                InitTcp_Sync();
                Console.ReadKey();
            }

        }

        #endregion

        private static void Log(LogType t, string msg) {
            Console.Write($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:fff} [{t}] { msg}{Environment.NewLine}");
        }

        private enum LogType {
            Open,
            Send,
            Recv,
            Error,
            Info,
        }

    }


    public static class Expand {

        public static string GetIp {
            get {
                var localIp = "";
                var host = Dns.GetHostEntry(Dns.GetHostName());
                foreach (var ip in host.AddressList) { if (ip.AddressFamily.ToString() == "InterNetwork") localIp = ip.ToString(); }
                return localIp;
            }

        }


    }


}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值