利用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程序的更多相关文章

  1. 中国移动物联网平台数据转发 c# 控制台程序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  2. 万物云平台数据转发 c# 控制台程序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  3. tlink平台数据转发 c# 控制台程序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  4. HTTP_5_通信数据转发程序:代理、网关、隧道

    HTTP通信时,除客户端和服务器之外,还有一些用于通信数据转发的应用程序,例如代理,网关,隧道.配合服务器工作. 代理 转发功能,客户端与服务器之间可有多个代理, 缓存代理:减少服务器压力,透明代理: ...

  5. 《图解HTTP》读书笔记(七:通信数据转发程序-代理/网关/隧道)

    HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理.网关和隧道,它们可以配合服务器工作.这些服务器和应用程序可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服 ...

  6. 使用Restify+superagent做数据转发

    最近为了解决跨域问题,做了一个Node数据转发服务器,使用到了Restify和superagent. Restify 是nodejs的模块.虽然restify的API或多或少的参考了express,但 ...

  7. 基于Qt实现的TCP端口数据转发服务器

    对于Qt,比较喜欢qt的sdk框架,我也是用于做一些工作中用到的工具软件,基于qt的sdk做起来也比较快: 一.概述 今天要说的这个tcp端口转发服务器,主要是用于将监听端口的数据转发到另外一个服务器 ...

  8. json 解析double类型多出几位小数,利用NSDecimalNumber修复 , 服务器返回的数据,用数据类型接收(int,NSNumber)?

     后台返回float类型数据8.2,实际用AFN的json解析后得到8.1999999999,该怎么处理呢? 开发中处理处理价格金额问题, 后台经常返回float.double类型, 打印或转成NSS ...

  9. 鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机

    鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机 原文转载自「刘悦的技术博客」https://v3u.cn/a_id_176 众所周知,尤文图斯需要一座欧冠奖杯,C罗 ...

随机推荐

  1. Python中的 __all__和__path__ 解析

    https://blog.csdn.net/u012450329/article/details/53001071

  2. MFC 一个无参线程的CreateThread 使用

    最近想把c#的一个工作中用到的软件用MFC 实现出来, 刚下手 要了解的东西挺多,不但要对c++的语法,大体看一遍. 还要看MFC 内一些窗体,之类的相关的定义,比如cpp ,.h 内的类的定义方式等 ...

  3. andorid 网格视图GridView

    .xml <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android=&qu ...

  4. js 闭包 理解 copy

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解 ...

  5. 抽屉效果几大github第三方库

    首先感谢董铂然博客园,鄙人收藏学习之用,如有朋友看到.有需要请直接前往董铂然博客园本文, 请点击查看原文 在公司项目新版本方案选择中,对主导航中要使用的抽屉效果进行了调研.主要原因是旧的项目中所用的库 ...

  6. Mongodb数据导出工具mongoexport和导入工具mongoimport介绍(转)

    原文地址:http://chenzhou123520.iteye.com/blog/1641319 一.导出工具mongoexport Mongodb中的mongoexport工具可以把一个colle ...

  7. There are stopped jobs

    问题背景 系统:ubuntu,当输入exit退出shell时,出现There are stopped jobs 无法退出shell 解决办法 找到这个stopped job然后终止它 jobs 或者 ...

  8. Netty 源码(一)Netty 组件简介

    Netty 源码(一)Netty 组件简介 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.Netty 架构 Core: ...

  9. proguard-rules.pro、混淆、导jar包

    前记: 买了一个<精通Android Studio>本来最想看的是关于混淆导jar包的,哪知道没有,有点小失望. 好吧,自己来. 在用Android Studio开发的时候,把minify ...

  10. 修改电脑自动休眠时间win10

    https://jingyan.baidu.com/article/adc81513a481cdf723bf73e6.html