服务器
void Start() { InitNet(); } Thread myThread; public void InitNet() { IAsyncResult result = null; result = InitUdpNet(); if (result == null) return; bool success = result.AsyncWaitHandle.WaitOne(5000, true); if (!success) { //超时 NetClosed(); Debug.Log("connect Time Out Net will reconnect"); InitNet(); } else { //与socket建立连接成功,开启线程接受服务端数据。 // worldpackage = new List<JFPackage.WorldPackage>(); myThread = new Thread(new ThreadStart(ReceiveSorket)); myThread.IsBackground = true; myThread.Start(); } } private void ReceiveSorket() { while (true) { byte[] data = new byte[1024]; //发送接受信息 recv = newsock.ReceiveFrom(data, ref Remote); Debug.Log(Encoding.Unicode.GetString(data, 0, recv)); newsock.SendTo(data, recv, SocketFlags.None, Remote); } } private IAsyncResult InitUdpNet() { //得到客户机IP IPEndPoint sender = new IPEndPoint(IPAddress.Any, port); newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址 newsock.Bind(sender); Remote = (EndPoint)(sender); IAsyncResult result = newsock.BeginConnect(Remote, new AsyncCallback(connectCallback), newsock); return result; } private void connectCallback(IAsyncResult asyncConnect) { Debug.LogError("connectSuccess"); } int recv; Socket newsock; EndPoint Remote; int port = 8001; string stringData; // 发送消息 public void SendUdpBroadcasts() { //Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint sender = new IPEndPoint(IPAddress.Broadcast, port); EndPoint Remote = (EndPoint)sender; newsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);//设置该scoket实例的发送形式 string request = "你好,TEST SEND!";//初始化需要发送而的发送数据 byte[] buffer = Encoding.Unicode.GetBytes(request); newsock.SendTo(buffer, Remote); } public void SendUdp(string str) { byte[] data = new byte[1024]; data = Encoding.Unicode.GetBytes(str); newsock.SendTo(data, data.Length, SocketFlags.None, Remote); } //关闭Socket public void NetClosed() { // Debuger.LogError("NetClosed"); if (newsock != null) { if (newsock.Connected) { newsock.Shutdown(SocketShutdown.Both); newsock.Close(); } } newsock = null; } void OnDestroy() { NetClosed(); }
客户端:
// Use this for initialization void Start() { InitNet(); } // Update is called once per frame void Update() { } Socket server; EndPoint Remote; string input, stringData; public void InitNet() { //获取本机可用IP地址 byte[] data = new byte[1024]; Debug.Log("This is a Client, host name is {0}"+ Dns.GetHostName()); //设置服务IP,设置TCP端口号 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.0.131"), 8001); //定义网络类型,数据连接类型和网络协议UDP server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); server.Bind(ipep); string welcome = "Hello! "; data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ipep); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); Remote = (EndPoint)sender; data = new byte[1024]; //对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制 //server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100); recv = server.ReceiveFrom(data, ref Remote); Debug.Log("Message received from {0}: "+ Remote.ToString()); Debug.Log(Encoding.ASCII.GetString(data, 0, recv)); myThread = new Thread(new ThreadStart(ReceiveSorket)); myThread.IsBackground = true; myThread.Start(); } Thread myThread; int recv; IPEndPoint remote; //接收数据 private void ReceiveSorket() { while (true) { // server.SendTo(Encoding.ASCII.GetBytes("你是谁"), Remote); byte[] data = new byte[1024]; recv = server.ReceiveFrom(data, ref Remote); stringData = Encoding.Unicode.GetString(data); Debug.Log(stringData); } } // 发送消息 public void SendUdp() { server.SendTo(Encoding.Unicode.GetBytes("你是谁"), Remote); } //关闭Socket public void NetClosed() { // Debuger.LogError("NetClosed"); if (server != null) { server.Close(); } server = null; } void OnDestroy() { NetClosed(); }
相关推荐
udp通讯测试.rarudp通讯测试.rarudp通讯测试.rarudp通讯测试.rarudp通讯测试.rarudp通讯测试.rarudp通讯测试.rar
UDP通讯veristand工程建立教程
C# WPF ,通过socket udp通讯方式与康耐视相机进行无协议实时通讯,已测试可行
倍福UDP通讯例程_Basic.rar
基于Labview编写的自发自收的UDP通讯,安装好服务端与用户端即可进行局域网通讯。
资源名:ibaPDA-Interface-S7-TCP_UDP通讯配置实例源码 资源类型:程序源代码 源码说明: ibaPDA-Interface-S7-TCP_UDP通讯配置实例西门子plc配置实例 ibaPDA-Interface-S7-TCP_UDP通讯配置实例,西门子plc配置...
X-Plane11UDP通讯说明文档(中文翻译版,以及英文原版),可以作为插件开发的通讯接口参考资料
C# winform UDP通讯 VS2012
W5500通过网线接电脑或者交换机进行UDP通讯。 2、接线如下: PA4 SPI 片选 SCS 引脚 PA5 SPI 时钟 SCLK 引脚 PA7 SPI MOSI 主出从入 MOSI 引脚 PA6 SPI MISO 主入从出 MISO 引脚 PA3 RST 复位引脚 RST 引脚 PA2 INT ...
tcp udp通讯测试软件,用于测试当前电脑是否可以连通。用于云服务器测试等等。同时可以检测多人通讯是否正常。
LWIP裸机实现TCPUDP通讯,使用STM32开发板,网卡使用ENC28J60
W5500通过网线接电脑或者交换机,进行UDP通讯。 2、接线如下: PA4 SPI 片选 SCS 引脚 PA5 SPI 时钟 SCLK 引脚 PA7 SPI MOSI 主出从入 MOSI 引脚 PA6 SPI MISO 主入从出 MISO 引脚 PA3 RST 复位引脚 RST 引脚 PA2 ...
Labview基于局域网的UDP通讯子程序,包括如下: 1、发送字符串 2、接收字符串 3、发送数组 4、接收数组
基于socket udp fins协议 链接plc
TCP UDP 通讯VB源码,演示使用tcp udp两种通讯方式的VB源码
QT实现简单的udp通讯,在构造函数中绑定QT的ip地址(自动和发送端一样)及端口号(8082): bool result=uSocket->bind(8082, QUdpSocket::ShareAddress); 在界面中输入目标的IP地址和端口号,然后用netassist.exe...
用C#语言,VS工具开发的UDP通讯调试助手,包含源代码,有注释。供初学者学习,高手请路过。
Socket的TCP、UDP通讯(实现功能:文字发送,窗口震动,大文件传输,语音发送,语音通话、直接发送全屏截图)
基于C#的简单UDP通讯程序,有简单的窗口界面,实现双机通讯!
VS2010开发环境,C#版的UDP通讯,两个程序,实现点对点通讯。