(三)一个工作任务引起的乱战——udp通信
先上代码。该代码是在问度娘的过程中搜到的,自己实验运行了下,可以使用(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通信的更多相关文章
- (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用
C++程序编译为C#可调用的dll的过程: 1.新建一个Win32 Console Application 项目,项目名为:DLLDemo,下一步选择Application type为DLL; 2.在 ...
- (一)一个工作任务引起的乱战——c#中结构体与byte[]间相互转换
一个工作任务涉及到c#与c++系统间的udp通信,处理了蛮长时间没有完成任务,但是期间接触到不少小知识点.本人是初接触c#,c++语言没有接触过.可能写的东西都很小儿科,暂且记录下来当工作日记把. 先 ...
- [C语言]一个很实用的服务端和客户端进行UDP通信的实例
前段时间发了个TCP通信的例子,现在再来一个UDP通信的例子.这些可以作为样本程序,用到开发中.“裸写”socket老是记不住步骤,经常被鄙视…… 下面的例子很简单,写一个UDP的server用于收包 ...
- LVS三种工作方式八种算法
一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...
- VMWare提供了三种工作模式上网
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...
- VMWare三种工作模式 :bridge、host-only、nat
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...
- VMWare虚拟机网络的三种工作模式
VMWare提供了三种工作模式: 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,需要手工为虚拟系 ...
- HTTPD三种工作模型
HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...
- 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程
1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...
随机推荐
- PHP XML DOM
PHP XML DOM 内建的 DOM 解析器使在 PHP 中处理 XML 文档成为可能. DOM 是什么? W3C DOM 提供了针对 HTML 和 XML 文档的标准对象集,以及用于访问和操作这些 ...
- Linux Shell脚本编程--sed命令详解
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- html5之web worker
Web Worker 在本文中 与 Web Worker 进行双向通信 WindowTimers 在 IE10 Platform Preview 4 中对 Web Worker 的更新 API 参 ...
- Ubuntu 12.04(32位)下PHP环境的搭建(LAMP)
Ubuntu 12.04 32位 下默认安装为5.3.10 不是以下图文中的5.4 1.首先打开命令行,切换到root身份,获得最新的软件包 su root sudo apt-get install ...
- DEDE提高生成HTmL的速度
1.找到include/inc/inc_fun_SpGetArcList.php打开之. 2.查找以下代码: for($i=0;$i<$ridnum;$i++){ if($tps ...
- Java内部类和外部类的通信探索
1.内部类访问外部类的成员和方法 在内部类中,可以无障碍地访问外部类的所有成员和方法. 在下面的实验代码中,可以看到,内部类sl可以访问外部类的私有成员:sz 和 cur. 同时可以访问私有方法:pr ...
- C程序设计语言练习题1-20
练习1-20 编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方.假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位.n应该是变量还是符号 ...
- Unity3D 经验记录
1.using UnityEngine.SceneManagement; 当在01场景调用02场景时,再载入回01场景时,代码保存的变量不会初始化,预制物体脚本内的变量会初始化. 2.当子物体太多时, ...
- javaWeb防止恶意登陆或防盗链的使用
使用场景:明明引用了一个正确的图片地址,但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟通使用”之类的“假图片”.用嗅探软件找到了多媒体资源的真实地址用下载软件仍然不能下载.下载一些资 ...
- ubuntu设置系统时间与网络时间同步
ubuntu设置系统时间与网络时间同步 Linux的时间分为System Clock(系统时间)和Real Time Clock (硬件时间,简称RTC). 系统时间:指当前Linux Ker ...