利用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. jQuery 实例

    选择器 $(this).hide() 隐藏当前的 HTML 元素. $("p").hide() 隐藏所有 <p> 元素. $(".test").hi ...

  2. Fiddler抓包使用教程-安装配置

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72876628 本文出自[赵彦军的博客] Fiddler是什么? Fiddler是一 ...

  3. istio分布式调用链Jaeger

    1.安装 kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kuberne ...

  4. hdu 1175(BFS&DFS) 连连看

    题目在这里:http://acm.hdu.edu.cn/showproblem.php?pid=1175 大家都很熟悉的连连看,原理基本就是这个,典型的搜索.这里用的是广搜.深搜的在下面 与普通的搜索 ...

  5. [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理

    [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理   Introduction to DPDK: ...

  6. 基于TCP的socket套接字的网络编程(客户端/服务端模式)

    于数据完整性要求较高的场合,就应采用TCP协议. IP网络层提供IP寻址和路由.因为在网络上数据可以经由多条线路到达目的地,网络层负责找出最佳的传输线路. IP地址与数据包: IP层就是把数据分组从一 ...

  7. 洛谷4054 [JSOI2009]计数问题

    原题链接 二维树状数组模板题. 对每一种颜色开一棵二维树状数组统计即可. #include<cstdio> using namespace std; const int N = 310; ...

  8. Ubuntu下实现gedit支持nesC语法高亮

    在TinyOS下主要采用nesC语言(C语言的一个变种)编程,ubuntu系统默认打开文本的工具是gedit,为实现gedit支持nesC语法高亮,将最下面的代码保存为nesC.lang文件,然后将n ...

  9. kdump 调试手段

    kdump是在系统崩溃的时候用来转储内存运行参数的一个工具和服务,打个比方,如果系统一旦崩溃那么正常的内核就没有办法工作了,在这个时候将由kdump产生一个用于capture当前运行信息的内核,该内核 ...

  10. Spring 注解原理(一)组件注册

    Spring 注解原理(一)组件注册 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 当我们需要使用 Spring 提供的 ...