新建两个控制台应用程序,一个是服务端,一个是客户端。

1、服务端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets; namespace UDPTest
{
class Program
{
//服务器端Socket对象
private static Socket serverSocket;
//接收数据的字符数组
private static byte[] receiveData = new byte[];
public static void Main(string[] args)
{
//实例化服务器端Socket对象
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//服务器端的IP和端口,IPAddress.Any实际是:0.0.0.0,表示任意,基本上表示本机IP
IPEndPoint server = new IPEndPoint(IPAddress.Any, );
//Socket对象跟服务器端的IP和端口绑定
serverSocket.Bind(server);
//客户端的IP和端口,端口 0 表示任意端口
IPEndPoint clients = new IPEndPoint(IPAddress.Any, );
//实例化客户端 终点
EndPoint epSender = (EndPoint)clients;
//开始异步接收消息 接收后,epSender存储的是发送方的IP和端口
serverSocket.BeginReceiveFrom(receiveData, , receiveData.Length, SocketFlags.None,
ref epSender, new AsyncCallback(ReceiveData), epSender);
Console.WriteLine("Listening...");
Console.ReadLine();
} private static void SendData(IAsyncResult iar)
{
serverSocket.EndSend(iar);
} private static void ReceiveData(IAsyncResult iar)
{
//客户端的IP和端口,端口 0 表示任意端口
IPEndPoint client = new IPEndPoint(IPAddress.Any, );
//实例化客户端 终点
EndPoint epSender = (EndPoint)client;
//结束异步接收消息 recv 表示接收到的字符数
int recv = serverSocket.EndReceiveFrom(iar, ref epSender);
//将接收到的数据打印出来,发送方采用什么编码方式,此处就采用什么编码方式 转换成字符串
Console.WriteLine("Client:" + Encoding.ASCII.GetString(receiveData, , recv));
//定义要发送回客户端的消息,采用ASCII编码,
//如果要发送汉字或其他特殊符号,可以采用UTF-8
byte[] sendData = Encoding.ASCII.GetBytes("hello");
//开始异步发送消息 epSender是上次接收消息时的客户端IP和端口信息
serverSocket.BeginSendTo(sendData, , sendData.Length, SocketFlags.None,
epSender, new AsyncCallback(SendData), epSender);
//重新实例化接收数据字节数组
receiveData = new byte[];
//开始异步接收消息,此处的委托函数是这个函数本身,递归
serverSocket.BeginReceiveFrom(receiveData, , receiveData.Length, SocketFlags.None,
ref epSender, new AsyncCallback(ReceiveData), epSender);
}
}
}

2、客户端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net; namespace UDPClient
{
class Program
{
private static Socket clientSocket;
//服务器端 终点
private static EndPoint epServer;
//接收数据的字符数组
private static byte[] receiveData; public static void Main(string[] args)
{
//客户端Socket对象实例化
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//设置服务器端IP地址和对应端口
IPEndPoint server = new IPEndPoint(IPAddress.Parse("127.0.0.1"), );
//实例化服务器端 终点
epServer = (EndPoint)server;
string msg; //要发送的消息
byte[] sendData; //要发送的字符串
while (true) {
msg = Console.ReadLine(); //输入要发送的消息
if (msg == "exit") break; //当输入“exit”时,退出客户端程序
//将消息通过ASCII编码转换为字符数组,
//如果要发送汉字或其他特殊符号,可以采用UTF-8
sendData = Encoding.ASCII.GetBytes(msg);
//开始异步发送消息
//参数:sendData 要发送的数据
//参数:0: 要发送数据的起始位置
//参数:sendData.Length: 要发送数据的字节数
//参数:SocketFlags.None: 按位组合方式
//参数:epServer: 接收方设备(包含IP和端口)
//参数:new AsyncCallback(SendData): 委托
//参数:null: 请求的状态信息
clientSocket.BeginSendTo(sendData, , sendData.Length, SocketFlags.None,
epServer, new AsyncCallback(SendData), null);
//实例化接收数据的字符数组
//若在声明时已经初始化,此处依然要进行重新初始化
//当上次接收的数据长度大于本次,则该数组里包含上次接收的残留数据
//比如:上次接收“你个小逗逼”。本次接收“开玩笑”。
//则数组中的数据为:“开玩笑逗逼”。
receiveData = new byte[];
//开始异步接收消息
//参数部分与异步发送部分对应,基本一致
clientSocket.BeginReceiveFrom(receiveData, , receiveData.Length, SocketFlags.None,
ref epServer, new AsyncCallback(ReceiveData), null);
}
} //异步发送消息的委托函数
private static void SendData(IAsyncResult iar)
{
//完成异步发送
clientSocket.EndSend(iar);
} //异步接收消息的委托函数
private static void ReceiveData(IAsyncResult iar)
{
//完成异步接收 recv 表示接收到的字节数
int recv = clientSocket.EndReceive(iar);
//将接收到的数据打印出来
Console.WriteLine("Server: " + Encoding.ASCII.GetString(receiveData, , recv));
}
}
}

UDP-C#代码的更多相关文章

  1. TCP和UDP Client 代码

    最近学习要求做网络编程,使用从网上找了一些资料,主要是网络协议的分层等通讯,你可以查看英文版的资料:CScharp网络编程英文版 下面直接给出代码吧,我想一看应该就懂. TCP Client 代码: ...

  2. UDP通讯代码

    UDP客户端代码: import socket # 创建套接字 socket.AF_INET:IPV4 socket.SOCK_DGRAM:UDP协议 udp_client=socket.socket ...

  3. Linux 下socket通信终极指南(附TCP、UDP完整代码)

    linux下用socket通信,有TCP.UDP两种协议,网上的很多教程把两个混在了一起,或者只讲其中一种.现在我把自己这两天研究的成果汇总下来,写了一个完整的,适合初学者参考,也方便自己以后查阅. ...

  4. 网络基础 二 (TCP协议代码,UDP协议代码)

    TCP  三次握手,四次断开 三次握手(必须先由客户端发起) 客户端:发送请求帧给服务器. 服务器:收到客户端的请求,并回复可以建立连接 客户端:与服务器建立连接 四次断开 (谁先发起都行,以客户端为 ...

  5. UDP template 代码

    服务端 from socket import * import json,struct client= socket(AF_INET,SOCK_STREAM) client.connect(('127 ...

  6. UDP服务器/客户端代码示例

    UDP服务器代码: #include <errno.h> #include <string.h> #include <stdlib.h> #include < ...

  7. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

  8. 【Network】高性能 UDP 应该怎么做?

    参考资料: EPOLL-UDP-GOLANG golang udp epoll - Google 搜索 go - golang: working with multiple client/server ...

  9. java udp与tcp

    一:基础  NET基本对象java.net.InetAddress类的使用 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetAd ...

  10. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

随机推荐

  1. Codeforces Round #202 (Div. 2) A,B

    A. Cinema Line time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  2. ZipArchive 打包下载压缩包

    用php的header()方式下载压缩包. 要点:1.不能在header导出压缩包前向浏览器输出内容,否则文件下载压缩包成功,打开的压缩包也会显示被破坏. 2.在压缩文件包的php代码前不可以有js脚 ...

  3. Moment.js 超棒Javascript日期处理类库

    Moment.js 不容错过的超棒Javascript日期处理类库 主要特性: 3.2kb超轻量级 独立类库,意味这你不需要倒入一堆js 日期处理支持UNIX 时间戳,String,指定格式的Date ...

  4. Win7 x64bit安装Oracle10g

    解决方案:   步骤一:在解压出的oracle文件夹中搜索refhost.xml文件,搜索结果出现2条符合条件文件,这两个文件均需要修改.   打开文件发现内容中有包含...5.0 6.0等系统说明, ...

  5. 从输入 URL 到浏览器接收的过程中发生了什么事情?

    从输入 URL 到浏览器接收的过程中发生了什么事情? What really happens when you navigate to a URL 上面两篇文章都解读的很好,值得阅读. 接下来在总结一 ...

  6. 关于jquery自带动画效果的stop()问题

    首先先来看一下jquery中stop()的用法 stop()用于在动画执行前停止正在执行的动画 stop(stopAll,goToEnd)的两个参数为布尔值: stopAll:true/false:是 ...

  7. 2015校招网易C/C++工程师笔试题(附答案)

    1. #include < filename.h >和#i nclude “filename.h” 有什么区别?   答:对于#i nclude < filename.h >, ...

  8. 如何用phpstorm编辑远程项目

    背景介绍:LAMP开发是很多公司喜欢采用的技术组合,故而做php开发,使用linux环境也是很多公司的要求.本文就来介绍下如何在windows下,使用phpstorm集成开发环境,来开发放在linux ...

  9. HEOI 2016 游记

    闲来无事,把这玩意儿补上. OI生涯中第一次正经的考试.挂的很惨. Day -1 不小心把机油(雾)sm惹毛了. 好像没啥别的事儿. Day 0 说好了上午直接去机房,然而临时说让我们上完前两节课再去 ...

  10. 在django项目外,使用django.db链接数据库(postgres)

    要用python链接到数据库,又不想写太多代码.想到了django,就偷懒了下.用django.db直连. django版本:1.6.5 (1.5以后可以用以下代码) #coding=utf-8 __ ...