亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用.Net 4.5異步功能進行套接字編程

使用.Net 4.5異步功能進行套接字編程

C#
慕碼人8056858 2019-09-20 16:15:26
我以前使用過BeginAccept()和BeginRead(),但與Visual Studio 2012我想利用新的異步的(async,await)功能在我的socket服務器程序。我該如何完成AcceptAsync和ReceiveAsync功能?using System.Net;using System.Net.Sockets;namespace OfficialServer.Core.Server{    public abstract class CoreServer    {        private const int ListenLength = 500;        private const int ReceiveTimeOut = 30000;        private const int SendTimeOut = 30000;        private readonly Socket _socket;        protected CoreServer(int port, string ip = "0.0.0.0")        {            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            _socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port));            _socket.Listen(ListenLength);            _socket.ReceiveTimeout = ReceiveTimeOut;            _socket.SendTimeout = SendTimeOut;            _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);            _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true);        }        public void Start()        {            }    }}
查看完整描述

3 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

您可以使用TaskFactory.FromAsync自動換行Begin/ End成對async操作。


Stephen Toub 在他的博客上有一個等待Socket更有效的*Async終端的等待。我建議將其與TPL Dataflow結合使用,以創建完全async兼容的Socket組件。


查看完整回答
反對 回復 2019-09-20
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

Socket.ReceiveAsync很奇怪。它與.net4.5中的async / await功能無關。它被設計為一種替代套接字API,它不會像BeginReceive / EndReceive那樣破壞內存,只需要在最核心的服務器應用程序中使用。為了給您一些規模感,我們運行了一個服務器BeginXXXX / EndXXXX方法,可以輕松支持5000個連接的客戶端。我從來沒有需要使用ReceiveAsync,我可能在考慮使用ReceiveAsync和SocketAsyncEventArgs進行重寫之前升級硬件,因為它可能在我的時間方面更便宜。

查看完整回答
反對 回復 2019-09-20
  • 3 回答
  • 0 關注
  • 571 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號