利用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. 前端基础之BOM和DOM day52

    前端基础之BOM和DOM   前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互 ...

  2. python 网络基础 之 网络协议

    osi 七层协议 互联网协议按照功能不同分为osi七层或者tcp/ip 五层或tcp/ip 四层 tcp/ip 四层 1.应用层 2.传输层 3.网络层 4.网络接口层 tcp/ip 五层 1.应用层 ...

  3. C++中的fstream,ifstream,oftream

    https://blog.csdn.net/kingstar158/article/details/6859379 先mark一个大佬的随笔,有时间再回头看 总结: 使用ifstream和ofstre ...

  4. hdu 1010(DFS) 骨头的诱惑

    http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意从S出发,问能否在时间t的时候到达终点D,X为障碍 需要注意的是要恰好在t时刻到达,而不是在t时间 ...

  5. GM Tech 2 works with Hummer Yes or No

    This is about GM Tech 2 scan tool for Hummer troubleshooting and programming. Can I have a cheap Tec ...

  6. Qt5+VS2010的安装及使用

    在我的博客<Win7下Qt5的安装及使用>中讲解了win7下Qt5+MinGW的安装及使用,本节再讲解win7下Qt5+VS2010的安装及使用.利用Qt5+MinGW开发应用程序比较麻烦 ...

  7. UI设计教程:关于版式设计

    版式设计是视觉传达的重要手段之一,版式设计,即把有限的视觉元素在版面页进行有效的视觉组合,最优化地传达信息的同时,去影响受众,使受众产生视觉上的美感. 版式设计基本流程  在进行版式设计时,设计作品的 ...

  8. Python之路(第十四篇)os模块

    一.os模块 1.os.getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) import os print(os.getcwd()) 2.os.chdir(path) 改变 ...

  9. Java虚拟机的相关笔记

    1.垃圾GC回收事件Minor GC(只清除新生代),Full GC(清除新生代和老年代),Major GC(清除新生.老年代和持久代). 2.堆分为新生代.老年代和持久代,持久代一般存放静态文件. ...

  10. 内存溢出和内存泄漏的区别(ZZ)

      内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出 ...