LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

ipmsg C#局域网聊天工具、消息推送实现思路与源码

admin
2016年12月23日 18:41 本文热度 7267

C#局域网聊天工具怎么实现?

1. 网络通讯编程的基础便是协议,信息的发送常用的协议有面向连接的TCP协议,以及不面向连接的UDP协议

2. TCP:TransmissionControlProtocol传输控制协议,其是一种面向连接的、可靠的字节流服

务。[]面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。

3. UDP:UserDatagramProtocol用户数据报协议(RFC768),UDP传送数据前并不与对方建立连

接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。

4. 系统也要定义自己的通讯协议,来完成一些系统的功能,如用户上,下线的通知,都要定义

自己的通讯协议来完成相应的功能!也可以称这种自定义的协议为“命令”.

5. 下面以著名的飞鸽传书为例,说明其自定义的协议(命令)

IPMSG_NOOPERATION不进行任何操作

IPMSG_BR_ENTRY用户上线

IPMSG_BR_EXIT用户退出

IPMSG_ANSENTRY通报在线

IPMSG_SENDMSG发送消息

IPMSG_RECVMSG通报收到消息

IPMSG_GETFILEDATA请求通过TCP传输文件

IPMSG_RELEASEFILES停止接收文件

IPMSG_GETDIRFILES请求传输文件夹以“IPMSG_BR_ENTRY用户上线”和“IPMSG_ANSENTRY通报在线”为例说明命令处理流程:当程序启动时,命令IPMSG_BR_ENTRY被广播到网络中,向所有在线的用户提示一个新用户的到达(即表示“我来了”);所有在线用户将把该新上线用户添加到自己的用户列表中,并向该新上线用户发送IPMSG_ANSENTRY命令(即表示“我在线”);该新上线用户接收到IPMSG_ANSENTRY命令后即将在线用户添加到自己的用户列表中。

PS:根据本系统的特征,可以在聊天部分采用UDP协议,在文件传输,视频,语音功能上采用TCP协议

6. 程序启动就要发送广播消息,如何发送广播消息,以及C#如何实现广播.

第一部分.什么是广播地址,以及广播地址怎么计算

1.1广播地址是什么?

主机号全为1,用于向一个网络内的所有主机发送信息的IP地址.如:受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。

PS:一般无特殊要求广播地址选择255.255.255.255即可.

1.2计算方法

首先计算网络地址=IP地址逻辑与(&)子网掩码

先把IP,子网掩码转为2进制,然后进行逻辑与运算,得出网络地址

例:

IP192.168.1.3子网掩码255.255.0.0

IP转二进制11000000.10100100.00000001.00000011

子网掩码11111111.11111111.00000000.00000000

与运算后11000000.10100100.00000000.00000000

192.168.0.0这就是网络地址,其中子网掩码全1对应为网络号,全0对应的是主机号,即192.168.0.0对应的网络号为192.168,主机号为0.0.将网络地址主机部分全取反后得到的地址便是广播地址:

广播地址11000000.10100100.11111111.11111111

换成10进制则为192.168.0.0

ipmsg C#局域网聊天工具、消息推送实现思路与源码

第二部分.C#利用UDP协议如何实现广播

2.1如何实现UDP广播,直接举例说明:

button1_Click时使用了UDP广播向外发送了数据

RecData()在后台接受UDP协议的消息

//UDP通过广播实现群发功能

namespace BroadcastExample

{

public partial class Form1:Form

{

delegate void AppendStringCallback(stringtext);

AppendStringCallback appendstringcallback;

//使用的接收端口51008

///<summary>

///端口号

///</summary>

private int port=51008;

///<summary>

///udp连接对象

///</summary>

private UdpClient udpclient;

public Form1()

{

InitializeComponent();

appendstringcallback = new AppendStringCallback(AppendString); }

///<summary>

///委托对象的处理过程

///</summary>

///<paramname="text"></param>

private void AppendString(stringtext)

{

if(richtextBox2.InvokeRequired==true)

{

this.Invoke(appendstringcallback,text);

}

else

{

richtextBox2.AppendText(text+"\r\n");

}

}

///<summary>

///在后台运行的接收线程

///</summary>

private void RecData()

{

//本机指定端口接收

udpclient=new UdpClient(port);

IPEndPoint remote=null;

ipmsg C#局域网聊天工具、消息推送实现思路与源码

//接收从远程主机发送过来的信息

while(true)

{

try

{

//关闭udpclient时此句会产生异常

byte[]bytes= (refremote);

stringstr=Enco (bytes,0,bytes.Length);

AppendString(string.Format("来自{0}:{1}",remote,str));

}

catch

{

//退出循环,结束线程

break;

}

}

}

privatevoidForm1_Load(objectsender,EventArgse)

{

//创建一个线程接收接收远程主机发来的信息

Thread mythread=new Thread(new ThreadStart(RecData));

//将线程设为后台运行

mythread.IsBackground=true;

mythread.Start();

}

private void Form1_FormClosing(objectsender,FormClosingEventArgse) {

udpclient.Close();

}

private void button1_Click(objectsender,EventArgse)

{

UdpClient myUdpclient=newUdpClient();


该文章在 2016/12/23 18:41:03 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved