美文网首页
Socket UDP网络编程

Socket UDP网络编程

作者: ___________6a1d | 来源:发表于2018-09-24 14:42 被阅读0次

UDP介绍

UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。
我们通过UDP进行信息收发的时候,没有严格客户端和服务端的区别,它不同于TCP,TCP 必须建立可靠连接之后才可以通信,而UDP随时都可以给指定的ip和端口所对应进程发送消息。UDP发送消息时需要绑定自己IP 和 端口号,接收消息的时候没有特殊限制,只要有人给自己发送,自己在线,就可以接收。

Socket UDP通信代码表示

服务端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Lesson1
{
    class Program
    {
        static Socket udpServer;
        static void Main(string[] args)
        {
            //1.创建Socket(地址族:通常选Inter,套接字通讯类型:数据报,协议:Udp)
            udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //2.绑定IP和端口号
            udpServer.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2333));
            //3.接收数据,需要指定从哪个ip接收
            new Thread(ReceiveMsg) { IsBackground=true}.Start();//设置为后台线程
        }
        static void ReceiveMsg()
        {
            while (true)
            {
                byte[] buffers = new byte[1024];
                EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
                int length = udpServer.ReceiveFrom(buffers, ref remoteEndPoint);//这个方法会把数据的来源(ip+端口号)放到第二个参数上
                string msg = Encoding.UTF8.GetString(buffers, 0, length);
                Console.WriteLine("从ip:" + (remoteEndPoint as IPEndPoint).Address + "端口:" + (remoteEndPoint as IPEndPoint).Port + "获取了消息:" + msg);
            }

            
        }
    }
}

客户端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;

namespace Lesson2
{
    class Program
    {
        static void Main(string[] args)
        {
            //1.创建socket
            Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //2.发送数据
            while (true)
            {
                EndPoint serverPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2333);//发送方的ip和端口号
                string msg = Console.ReadLine();
                byte[] buffers = Encoding.UTF8.GetBytes(msg);
                udpClient.SendTo(buffers, serverPoint);
            }
        }
    }
}

TCP和UDP的区别

image.png

相关文章

  • 网络编程

    网络 Socket 基于TCP协议的Socket编程 基于UDP协议的Socket编程

  • Day18总结

    一.网络通信过程TCP协议和UDP协议二.socket编程 1.socket编程定义:socket又叫套接字。指的...

  • 网络模型

    socket网络编程 socket分为tcp协议和udp协议: udp: 1.面向无连接,将数据源封装在数据包中,...

  • Socket UDP网络编程

    UDP介绍 UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境...

  • 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通...

  • socket创建udp传输

    socket网络编程那篇文章说过,udp是面向无连接的,使用数据报,socket type使用sock_DGRAM...

  • Java基础09网络编程

    Java 基础08GUI 熟练掌握什么是网络编程,网络编程的三要素,Socket原理机制、UDP传输、TCP传输等...

  • socket网络编程-基础知识

    什么是网络编程 网络编程的本质是两个设备之间的数据交换。 Socket、TCP/IP和Udp TCP 传输控制协议...

  • Java socket

    Java Socket实现基于TCP和UDP多线程通信Java Socket编程

  • (三)即时通讯系列之UDPSocket

    即时通讯系列之Socket简介 转自他人 1. UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多...

网友评论

      本文标题:Socket UDP网络编程

      本文链接:https://www.haomeiwen.com/subject/uqicoftx.html