基于UDP协议的程序设计
使用UdpClient类进行编程
UdpClient类的使用方法
第一阶段 创建UdpClient实例
UdpClient udpClient = new UdpClient();
IPAddress remoteAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint iep = new IPEndPoint(remoteAddress, );
第二阶段 数据发送
byte[] sendBytes = System.Text.Encoding.Unicode.GetBytes("Hello C#");
udpClient.Send(sendBytes,sendBytes.Length,iep);
第二阶段 数据接收
IPEndPoint iep2 = new IPEndPoint(IPAddress.Any, );
byte[] receiveBytes = udpClient.Receive(ref iep2);
string getData = System.Text.Encoding.Unicode.GetString(receiveBytes);
第三阶段 连接关闭
udpClient.Close();
一般常用声明的方式如下
1 UdpClient udpClient2 = new UdpClient("127.0.0.1",8000);
2 udpClient2.Send(sendBytes, sendBytes.Length);
测试代码:
服务器程序:
class Program
{
static void Main(string[] args)
{
StartListener();
Console.ReadLine();
} private static void StartListener()
{
UdpClient udpServer = new UdpClient(); //服务器方的端口号为8000 IPEndPoint myHost = null; try
{
while(true)
{
Console.WriteLine("等待接收...");
byte[] getBytes = udpServer.Receive(ref myHost);
string getString = Encoding.Unicode.GetString(getBytes, , getBytes.Length);
Console.WriteLine("接收信息:{0}",getString);
if (getString == "quit")
break; //向客户端回送消息
string sendString = "你好,Client";
Console.WriteLine("发送消息:{0}", sendString);
byte[] sendBytes = Encoding.Unicode.GetBytes(sendString);
udpServer.Send(sendBytes, sendBytes.Length, "127.0.0.1", ); } udpServer.Close();
Console.WriteLine("Client已经退出,请按回车键退出"); }
catch(Exception e)
{
Console.WriteLine(e.Message);
} }
}
客户端程序:
class Program
{
static void Main(string[] args)
{
string sendString = "客户端发送";
Send(sendString);
Send("quit");
Console.WriteLine();
} private static void Send(string sendString)
{
UdpClient udpClient = new UdpClient();
try
{
Console.WriteLine("向服务器发送数据:{0}",sendString);
byte[] sendBytes = Encoding.Unicode.GetBytes(sendString);
udpClient.Send(sendBytes, sendBytes.Length, "127.0.0.1", );
if(sendString == "quit")
{
Console.WriteLine("已经向对方发送quit消息,请按回车键退出程序");
return;
} IPEndPoint myHost = null;
byte[] getBytes = udpClient.Receive(ref myHost);
string getString = Encoding.Unicode.GetString(getBytes);
Console.WriteLine("接收信息:{0}",getString);
udpClient.Close();
Console.ReadLine(); }
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
运行结果:
服务器
客户端
当然,可以做成从控制台读取文本再进行发送。
基于UDP协议的程序设计的更多相关文章
- 基于UDP协议模拟的一个TCP协议传输系统
TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术.详细介绍如下: 1. TCP协议将需要发送的数据分割成数据块.数据块大小是通过MSS(maximum segment siz ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...
- 基于UDP协议的控制台聊天
这几天学了java的网络编程弄出一个基于UDP协议的聊天工具 功能 添加并且备注好友(输入对方的ip) 删除好友 查看好友列表 用java写的控制台程序导出可执行程序后不能双击打开 还需要些一个脚本文 ...
- 基于UDP协议的网络编程
UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...
- 网络编程应用:基于UDP协议【实现文件下载】--练习
要求: 基于UDP协议实现文件下载 发送方–请求–接收方发送文件–发送方接收文件 代码: 发送方: package Homework1; import java.io.File; import jav ...
- 基于UDP协议的socket编程
UDP协议特点: 1.无连接.服务端与客户端传输数据之前不需要进行连接,且没有超时重发等机制,只是把数据通过网络发送出去.也正是因为此特点,所以基于UDP协议的socket的客户端在启动之前不需要先启 ...
- 基于UDP协议的控制台聊天程序(c++版)
本博客由Rcchio原创,转载请告知作者 ------------------------------------------------------------------------------- ...
- Learning-Python【30】:基于UDP协议通信的套接字
UDP协议没有粘包问题,但是缓冲区大小要足够装数据包大小,建议不要超过 512 服务端: # 服务端 import socket server = socket.socket(socket.AF_IN ...
随机推荐
- [转]Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法
'dmesg'命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构.cpu.挂载的硬件,RAM等多个运行级别的大量的系统信息.当计算机启动时,系统内核(操作系统的核心部分)将会被加载到 ...
- [转]C#操作注册表
原文链接:http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-regidit.html 下面我们就来用.NET下托管语言C#注册表操作,主 ...
- python学习笔记整理——集合 set
python学习整理笔记--集合 set 集合的用途:成员测试和消除重复的条目,进行集合运算 注意:花括号或set()函数可以用于创建集合. 注意:若要创建一个空的集合你必须使用set(),不能用{} ...
- jquery+bootstrap使用数字增减按钮
<div class="container"> <div class="page-header"><h1>Bootstrap ...
- ubuntu下启动、关闭tomcat,查看tomcat运行日志
启动:一般是执行sh tomcat/bin/startup.sh 停止:一般是执行sh tomcat/bin/shutdown.sh查看:执行ps -ef |grep tomcat 输出如下 *** ...
- Apache启动提示 httpd: apr_sockaddr_info_get() failed for xxx
httpd: apr_sockaddr_info_get() failed for xxx httpd: Could not reliably determine the server's fully ...
- vim选中字符复制/剪切/粘贴
转载自:http://www.cnblogs.com/luosongchao/p/3193153.html 问题描述: vim 中选中指定字符,进行复制/剪切/粘贴 选择:1.普通模式下--v+hjk ...
- MVC3缓存之一:使用页面缓存
MVC3缓存之一:使用页面缓存 在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可. 我们建一个Demo来测试一下,在此Demo中,在View的Hom ...
- Spring常用注解,自动扫描装配Bean
1 引入context命名空间(在Spring的配置文件中),配置文件如下: xmlns:context="http://www.springframework.org/schema/con ...
- IE下实现PlaceHolder
/* * jQuery placeholder, fix for IE6,7,8,9 * @author JENA * @since 20131115.1504 * @website ishere.c ...