利用irc服务器做物联网数据转发 c# winform程序
利用irc协议的优点:
免费,不用购买服务器就可以实现稳定公网转发数据
开源,irc的客户端和开源库众多,省去了自己造轮子的时间
历史悠久,互联网诞生伊始就有irc
缺点:安全性比较差
简单协议接收可以用:https://kiwiirc.com/
下面是发送客户端的源码:
using System;
using TechLifeForum;
using System.Windows.Forms;
using System.Timers;
using System.Net.Sockets;
using System.IO;
using System.Net;
using System.Text; namespace ClientDemo
{
public partial class frmMain : Form
{
IrcClient client;
public static string sendmessage;
public frmMain()
{
InitializeComponent();
} private void frmMain_Load(object sender, EventArgs e)
{ }
private void btnConnect_Click(object sender, EventArgs e)
{
if (btnConnect.Text == "连接")
{
checkSSL.Enabled = false;
DoConnect();
}
else
{
DoDisconnect();
checkSSL.Enabled = true;
}
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
if (client.Connected && !String.IsNullOrEmpty(txtSend.Text.Trim()))
{ if (txtChannel.Text.StartsWith("#"))
client.SendMessage(txtChannel.Text.Trim(), txtSend.Text.Trim());
else
client.SendMessage("#" + txtChannel.Text.Trim(), txtSend.Text.Trim()); AddToChatWindow("Me: " + txtSend.Text.Trim());
txtSend.Clear();
txtSend.Focus();
}
}
catch
{ }
}
private void txtSend_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
btnSend.PerformClick();
} private void DoConnect()
{
if (String.IsNullOrEmpty(txtServer.Text.Trim()))
{
MessageBox.Show("Please specify a server");
return;
}
if (String.IsNullOrEmpty(txtChannel.Text.Trim()))
{
MessageBox.Show("Please specify a channel");
return;
}
if (String.IsNullOrEmpty(txtNick.Text.Trim()))
{
MessageBox.Show("Please specify a nick");
return;
} int port;
if (Int32.TryParse(txtPort.Text, out port))
if (checkSSL.Checked)
{
client = new IrcClient(txtServer.Text.Trim(), port, true);
}
else {
client = new IrcClient(txtServer.Text.Trim(), port, false);
}
else
client = new IrcClient(txtServer.Text.Trim()); AddEvents();
client.Nick = txtNick.Text.Trim(); btnConnect.Enabled = false;
txtChannel.Enabled = false;
txtPort.Enabled = false;
txtServer.Enabled = false;
txtNick.Enabled = false;
rtbOutput.Clear(); // in case they reconnect and have old stuff there client.Connect();
}
private void DoDisconnect()
{ btnConnect.Enabled = true;
txtChannel.Enabled = true;
txtPort.Enabled = true;
txtServer.Enabled = true;
txtNick.Enabled = true; lstUsers.Items.Clear();
txtSend.Enabled = false;
btnSend.Enabled = false; client.Disconnect();
client = null; btnConnect.Text = "连接";
}
private void AddEvents()
{
client.ChannelMessage += client_ChannelMessage;
client.ExceptionThrown += client_ExceptionThrown;
client.NoticeMessage += client_NoticeMessage;
client.OnConnect += client_OnConnect;
client.PrivateMessage += client_PrivateMessage;
client.ServerMessage += client_ServerMessage;
client.UpdateUsers += client_UpdateUsers;
client.UserJoined += client_UserJoined;
client.UserLeft += client_UserLeft;
client.UserNickChange += client_UserNickChange;
}
private void AddToChatWindow(string message)
{
rtbOutput.AppendText(message + "\n");
rtbOutput.ScrollToCaret();
} #region Event Listeners void client_OnConnect(object sender, EventArgs e)
{
txtSend.Enabled = true;
txtSend.Focus();
btnSend.Enabled = true; btnConnect.Text = "Disconnect";
btnConnect.Enabled = true; if (txtChannel.Text.StartsWith("#"))
client.JoinChannel(txtChannel.Text.Trim());
else
client.JoinChannel("#" + txtChannel.Text.Trim()); } void client_UserNickChange(object sender, UserNickChangedEventArgs e)
{
lstUsers.Items[lstUsers.Items.IndexOf(e.Old)] = e.New;
} void client_UserLeft(object sender, UserLeftEventArgs e)
{
lstUsers.Items.Remove(e.User);
} void client_UserJoined(object sender, UserJoinedEventArgs e)
{
lstUsers.Items.Add(e.User);
} void client_UpdateUsers(object sender, UpdateUsersEventArgs e)
{
lstUsers.Items.Clear();
lstUsers.Items.AddRange(e.UserList); } void client_ServerMessage(object sender, StringEventArgs e)
{
Console.WriteLine(e.Result);
} void client_PrivateMessage(object sender, PrivateMessageEventArgs e)
{
AddToChatWindow("PM FROM " + e.From + ": " + e.Message);
} void client_NoticeMessage(object sender,NoticeMessageEventArgs e)
{
AddToChatWindow("NOTICE FROM " + e.From + ": " + e.Message);
} void client_ExceptionThrown(object sender, ExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message);
} void client_ChannelMessage(object sender, ChannelMessageEventArgs e)
{
AddToChatWindow(e.From + ": " + e.Message);
} #endregion
#region SSL
private void checkSSL_CheckedChanged(object sender, EventArgs e)
{
if (checkSSL.Checked)
{
MessageBox.Show("SSL IRC Usually opperates over port 6697!", "WARNING!");
}
}
#endregion public static string Get(string url)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
try
{
//获取内容
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
}
finally
{
stream.Close();
}
return result;
} void Tmr_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
int a = new Random().Next(, );
sendmessage = "当前温度" + a.ToString();
//MessageBox.Show(sendmessage);
txtSend.Text = sendmessage;
btnSend_Click(sender, e);
}
catch
{ }
} private void lstUsers_SelectedIndexChanged(object sender, EventArgs e)
{ } private void LabelServer_Click(object sender, EventArgs e)
{
System.Timers.Timer maxTimer = new System.Timers.Timer();
maxTimer.Elapsed += new ElapsedEventHandler(Tmr_Elapsed);
// 设置引发时间的时间间隔 此处设置为1秒(1000毫秒)
maxTimer.Interval = ;
maxTimer.Enabled = true; }
}
}
利用irc服务器做物联网数据转发 c# winform程序的更多相关文章
- 中国移动物联网平台数据转发 c# 控制台程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- 万物云平台数据转发 c# 控制台程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- tlink平台数据转发 c# 控制台程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- HTTP_5_通信数据转发程序:代理、网关、隧道
HTTP通信时,除客户端和服务器之外,还有一些用于通信数据转发的应用程序,例如代理,网关,隧道.配合服务器工作. 代理 转发功能,客户端与服务器之间可有多个代理, 缓存代理:减少服务器压力,透明代理: ...
- 《图解HTTP》读书笔记(七:通信数据转发程序-代理/网关/隧道)
HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理.网关和隧道,它们可以配合服务器工作.这些服务器和应用程序可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服 ...
- 使用Restify+superagent做数据转发
最近为了解决跨域问题,做了一个Node数据转发服务器,使用到了Restify和superagent. Restify 是nodejs的模块.虽然restify的API或多或少的参考了express,但 ...
- 基于Qt实现的TCP端口数据转发服务器
对于Qt,比较喜欢qt的sdk框架,我也是用于做一些工作中用到的工具软件,基于qt的sdk做起来也比较快: 一.概述 今天要说的这个tcp端口转发服务器,主要是用于将监听端口的数据转发到另外一个服务器 ...
- json 解析double类型多出几位小数,利用NSDecimalNumber修复 , 服务器返回的数据,用数据类型接收(int,NSNumber)?
后台返回float类型数据8.2,实际用AFN的json解析后得到8.1999999999,该怎么处理呢? 开发中处理处理价格金额问题, 后台经常返回float.double类型, 打印或转成NSS ...
- 鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机
鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机 原文转载自「刘悦的技术博客」https://v3u.cn/a_id_176 众所周知,尤文图斯需要一座欧冠奖杯,C罗 ...
随机推荐
- 操作系统的发展史 day36
什么是操作系统 可能很多人都会说,我们平时装的windows7 windows10都是操作系统,没错,他们都是操作系统.还有没有其他的? 想想我们使用的手机,Google公司的Androi ...
- BOM DOM jQuery
. BOM . location相关 . location.href . location.href="http://www.sogo.com" . location.reload ...
- C#设计模式-1简单工厂模式Simple Factory)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 简单的工 ...
- 21.Mysql Server优化
21.优化Mysql Server21.1 Mysql体系结构概览Mysql由Mysql Server层和存储引擎层组成.Mysql实例由一组后台进程.一写内存块和若干服务线程组成.Mysql后台进程 ...
- (转)jquery.cookie中的操作
jquery.cookie中的操作: jquery.cookie.js是一个基于jquery的插件,点击下载! 创建一个会话cookie: $.cookie(‘cookieName’,'cooki ...
- Servlet会话管理一(URL重写和表单隐藏域)
会话可以简单的理解为客户端用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器的整个过程称为一个会话.即一个客户端用户和服务器端进行通讯的过程,也是客户端和服务器端之间的数据传 ...
- AWVS基本用法
https://www.bugbank.cn/q/article/5983de41cbb936102d397781.html
- static与非static的区别
static 静态的,可以修饰变量或者方法 用于变量的区别 1. static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存 ...
- Graphviz 环境变量设置
今天晚上解决了一个错误,如下:
- QT5中无法包含Qtgui头文件的问题。
今天新学QT是,从一个ppt中边看边抄边学.前几页还能理解,但到了用纯源码写空白QT工程时,便遇到了一个问题.头文件里包含 #include <QtGui> 但是编译时总是出现下面图一中 ...