DNS为什么不用TCP而用UDP

1.UDP快,只需要一问一答,TCP需要三次握手四次挥手
2.DNS报文一般比较小,用一个UDP包可以装的下
3.UDP不需要建立连接,减小DNS服务器的负担

参考:
https://www.zhihu.com/question/310145373

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
语音聊天源码 namespace VoiceChat.Model { // Подтверждения public enum Flags { Accept, BeginVideoSend, EndVideoSend } // Состояния модели public enum ModelStates { WaitCall, OutgoingCall, IncomingCall, Talk, Close } public class VoiceChatModel : INotifyPropertyChanged { private const int LINES_COUNT = 2; public AudioSharing audio; public VideoSharing video; public BdtpClient bdtpClient; private Thread waitCall; public bool Connected { get { return bdtpClient.Connected; } } public IPAddress RemoteIP { get { return remoteIP; } set { remoteIP = value; OnPropertyChanged("RemoteIP"); } } private IPAddress remoteIP; public IPAddress LocalIP { get { return bdtpClient.LocalIP; } } // Текущее состояние public ModelStates State { get { return state; } set { state = value; OnPropertyChanged("State"); mediaSounds.ControlSounds(); } } private ModelStates state; public CallTimer callTimer; private MediaSounds mediaSounds; public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string PropertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); } public VoiceChatModel() { bdtpClient = new BdtpClient(GetLocalIP(), LINES_COUNT); audio = new AudioSharing(this); video = new VideoSharing(this); mediaSounds = new MediaSounds(this); callTimer = new CallTimer(); InitializeEvents(); BeginWaitCall(); } // Инициализация private void InitializeEvents() { bdtpClient.ReceiptReceived += ReceiveAccept; bdtpClient.ReceiptReceived += ReceiveDisconnect; bdtpClient.ReceiptReceived += video.ReceiveFlags; } private IPAddress GetLocalIP() { IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName()); return addresses.Where(x => x.AddressFamily == AddressFamily.InterNetwork).Last(); } // Обработчики приема подтверждений public static bool IsFlag(Flags flag, byte[] buffer) { return buffer.Length == 1 && buffer[0] == (byte)flag; } private void ReceiveAccept(byte[] buffer) { if (IsFlag(Flags.Accept, buffer)) { State = ModelStates.Talk; } } private void ReceiveDisconnect(byte[] buffer) { if (buffer.Length == 0) { EndCall(); } } // Исходящий вызов public void BeginCall() { State = ModelStates.OutgoingCall; EndWaitCall();

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值