先上代码。该代码是在问度娘的过程中搜到的,自己实验运行了下,可以使用(vs2010  net fram4.0)。服务端代码:

using System;using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDP
{
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[]; //得到本机IP,设置TCP端口号  
IPEndPoint ip = new IPEndPoint(IPAddress.Any, );
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址        
newsock.Bind(ip);
Console.WriteLine("This is a Server, host name is {0}", Dns.GetHostName()); //等待客户机连接       
Console.WriteLine("Waiting for a client"); //得到客户机IP          
IPEndPoint sender = new IPEndPoint(IPAddress.Any, );
EndPoint Remote = (EndPoint)(sender);
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, , recv)); //客户机连接成功后,发送信息      
string welcome = "你好!见到你很高兴! "; //字符串与字节数组相互转换         
data = Encoding.ASCII.GetBytes(welcome); //发送信息         
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while (true)
{
data = new byte[];
//发送接受信息             
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine(Encoding.ASCII.GetString(data, , recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
}
}
}

客户端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDPClient
{
class Program
{
static void Main(string[] args)
{
byte[] data = new byte[];
string input, stringData;
//构建TCP 服务器        
Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName());
//设置服务IP,设置TCP端口号           
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), );
//定义网络类型,数据连接类型和网络协议UDP       
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = "你好! ";
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ip);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, );
EndPoint Remote = (EndPoint)sender;
data = new byte[];
//对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制  
int recv = server.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, , recv));
while (true)
{
input = Console.ReadLine();
if (input == "exit")
break;
server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
data = new byte[];
recv = server.ReceiveFrom(data, ref Remote);
stringData = Encoding.ASCII.GetString(data, , recv);
Console.WriteLine(stringData);
}
Console.WriteLine("Stopping Client.");
server.Close();
}
}
}

运行后,服务端与客户端能正确通信。
这些代码虽然在实际工作处理中不是特别完整,但是可以提供一个思路。

(三)一个工作任务引起的乱战——udp通信的更多相关文章

  1. (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用

    C++程序编译为C#可调用的dll的过程: 1.新建一个Win32 Console Application 项目,项目名为:DLLDemo,下一步选择Application type为DLL; 2.在 ...

  2. (一)一个工作任务引起的乱战——c#中结构体与byte[]间相互转换

    一个工作任务涉及到c#与c++系统间的udp通信,处理了蛮长时间没有完成任务,但是期间接触到不少小知识点.本人是初接触c#,c++语言没有接触过.可能写的东西都很小儿科,暂且记录下来当工作日记把. 先 ...

  3. [C语言]一个很实用的服务端和客户端进行UDP通信的实例

    前段时间发了个TCP通信的例子,现在再来一个UDP通信的例子.这些可以作为样本程序,用到开发中.“裸写”socket老是记不住步骤,经常被鄙视…… 下面的例子很简单,写一个UDP的server用于收包 ...

  4. LVS三种工作方式八种算法

    一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...

  5. VMWare提供了三种工作模式上网

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  6. VMWare三种工作模式 :bridge、host-only、nat

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...

  7. VMWare虚拟机网络的三种工作模式

    VMWare提供了三种工作模式: 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,需要手工为虚拟系 ...

  8. HTTPD三种工作模型

    HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...

  9. 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程

    1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...

随机推荐

  1. 转:初学者,手工注入测试方法小节 (出处:: 51Testing软件测试网--jie)

    1.加入单引号 ’提交,  结果:如果出现错误提示,则该网站可能就存在注入漏洞.    2.数字型判断是否有注入; 语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)  ...

  2. 【插件】WordPress缓存最佳组合:DB Cache Reloaded Fix + Hyper Cache

    DB Cache Reloaded Fix是一个出色的WordPress数据库缓存插件,可以大大减少对数据库的请求次数. Hyper Cache 是非常小巧但很强大的WordPress缓存插件,设置简 ...

  3. IBM X3650 服务器更换内存的过程记录

    前几天,由于天气气温太高,导致中心机房UPS自动保护性关闭,最终导致所有服务器都掉电.其中一台IBM X3650服务器报警,显示内存故障.原来这台服务器共有4G内存,现在打开服务器进入系统后,显示只有 ...

  4. 【学习笔记】【Foundation】集合Set

    不可变集合 NSSet :集合元素无顺序,没有索引号,元素不可重复. NSSet在功能上可看做是NSArray的父集,它是一个更通用的类. NSSet包含如下常用方法: setByAddingObje ...

  5. 生产环境下Centos 6.5优化配置 (装载)

    本文 centos 6.5 优化 的项有18处: 1.centos6.5最小化安装后启动网卡 2.ifconfig查询IP进行SSH链接 3.更新系统源并且升级系统 4.系统时间更新和设定定时任 5. ...

  6. Git使用说明--常用命令

    These are common Git commands used in various situations: start a working area (see also: git help t ...

  7. Linux C判断日期格式是否合法

    Title:Linux C判断日期格式是否合法 --2013-10-11 11:54 #include <string.h> // strlen() , strncpy() #includ ...

  8. Android的理解

    从组件的角度来考虑 Activity------------------Service-----------------Broadcast Receiver---------------------- ...

  9. Javascript OrderBy

    要在js 实现orderBy基本知识就是 array.sortarray.sort(function(a,b){ a 表示 row 0 b 表示 row 1 它会loop多次你可以比较 if(a &g ...

  10. FE: Sass and Bootstrap 3 with Sass

    Sass简介 Sass是CSS的预处理语言:提供了变量定义.函数定义.函数调用.类继承.嵌套(CSS层级关系)及代码引入功能. Sass安装指南 MAC OS X 10.10.3   终端 -> ...