UDP-C#代码
新建两个控制台应用程序,一个是服务端,一个是客户端。
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#代码的更多相关文章
- TCP和UDP Client 代码
最近学习要求做网络编程,使用从网上找了一些资料,主要是网络协议的分层等通讯,你可以查看英文版的资料:CScharp网络编程英文版 下面直接给出代码吧,我想一看应该就懂. TCP Client 代码: ...
- UDP通讯代码
UDP客户端代码: import socket # 创建套接字 socket.AF_INET:IPV4 socket.SOCK_DGRAM:UDP协议 udp_client=socket.socket ...
- Linux 下socket通信终极指南(附TCP、UDP完整代码)
linux下用socket通信,有TCP.UDP两种协议,网上的很多教程把两个混在了一起,或者只讲其中一种.现在我把自己这两天研究的成果汇总下来,写了一个完整的,适合初学者参考,也方便自己以后查阅. ...
- 网络基础 二 (TCP协议代码,UDP协议代码)
TCP 三次握手,四次断开 三次握手(必须先由客户端发起) 客户端:发送请求帧给服务器. 服务器:收到客户端的请求,并回复可以建立连接 客户端:与服务器建立连接 四次断开 (谁先发起都行,以客户端为 ...
- UDP template 代码
服务端 from socket import * import json,struct client= socket(AF_INET,SOCK_STREAM) client.connect(('127 ...
- UDP服务器/客户端代码示例
UDP服务器代码: #include <errno.h> #include <string.h> #include <stdlib.h> #include < ...
- c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP 入门级客户端与服务端交互代码 网 ...
- 【Network】高性能 UDP 应该怎么做?
参考资料: EPOLL-UDP-GOLANG golang udp epoll - Google 搜索 go - golang: working with multiple client/server ...
- java udp与tcp
一:基础 NET基本对象java.net.InetAddress类的使用 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetAd ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
随机推荐
- 一段可以使用的 hibernate获得对象->action存入List->jsp页面用<s:iterator>迭代的代码
SelectAction.java @SuppressWarnings("serial") @Component("selectAction") @Scope( ...
- 【C语言入门教程】3.2 数据的输入 与 输出
在程序的运行过程中,通常需要用户输入一些数据,而程序运算所得到的计算结果等又需要输出给用户,由此实现人与计算机之间的交互.所以在程序设计中,输入输出语句是一类必不可少的重要语句.在 C 语言中,没有专 ...
- php中向mysql插入数据
$sql='insert into news(title,subtitle,source,publishtime,content,image,author) values("'.unico ...
- CSS DIV HOVER
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- jQuery.extend()介绍
},{name:"Jerry",sex:"Boy"}) 得到的Result结果是: result={name:"Jerry",age:21, ...
- iOS开发——UI基础-UIImage,UIImageView的使用
1.UIImage 创建UIImage的两种方法 UIImage *image = [UIImage imageNamed:imageNmae]; UIImage *image = [UIImage ...
- jQuery获取页面及个元素高度、宽度
获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档 ...
- python 函数式编程工具
有三个内置函数与列表一起使用时非常有用:filter().map()和reduce(). 1. filter(function, sequence)返回的序列由function(item)结果为真的元 ...
- auto与decltype
今天搜狗笔试的一道选择题,原题给忘了,但记得所考的知识点.知识点很基础,但很容易忽视. 具体内容可参考C++ Primer. auto :变量取auto后,其所对应的类型 auto一般会 ...
- ubuntu: NO_PUBKEY 8D5A09DC9B929006
最近使用ubuntu16.04时,运行 sudo apt-get update 时出现如下错误: W: GPG error: http://archive.ubuntukylin.com:10006/ ...