zoukankan      html  css  js  c++  java
  • 利用irc服务器做物联网数据转发 c# winform程序

    利用irc协议的优点:

    免费,不用购买服务器就可以实现稳定公网转发数据

    开源,irc的客户端和开源库众多,省去了自己造轮子的时间

    历史悠久,互联网诞生伊始就有irc

    缺点:安全性比较差

    简单协议接收可以用:https://kiwiirc.com/

    下面是发送客户端的源码:

      1 using System;
      2 using TechLifeForum;
      3 using System.Windows.Forms;
      4 using System.Timers;
      5 using System.Net.Sockets;
      6 using System.IO;
      7 using System.Net;
      8 using System.Text;
      9 
     10 
     11 namespace ClientDemo
     12 {
     13     public partial class frmMain : Form
     14     {
     15         IrcClient client;
     16         public static string sendmessage;
     17         public frmMain()
     18         {
     19             InitializeComponent();
     20         }
     21 
     22         private void frmMain_Load(object sender, EventArgs e)
     23         {
     24 
     25 
     26         }
     27         private void btnConnect_Click(object sender, EventArgs e)
     28         {
     29             if (btnConnect.Text == "连接")
     30             {
     31                 checkSSL.Enabled = false;
     32                 DoConnect();
     33             }
     34             else
     35             {
     36                 DoDisconnect();
     37                 checkSSL.Enabled = true;
     38             }
     39         }
     40         private void btnSend_Click(object sender, EventArgs e)
     41         {
     42             try
     43             {
     44                 if (client.Connected && !String.IsNullOrEmpty(txtSend.Text.Trim()))
     45                 {
     46 
     47                     if (txtChannel.Text.StartsWith("#"))
     48                         client.SendMessage(txtChannel.Text.Trim(), txtSend.Text.Trim());
     49                     else
     50                         client.SendMessage("#" + txtChannel.Text.Trim(), txtSend.Text.Trim());
     51 
     52                     AddToChatWindow("Me: " + txtSend.Text.Trim());
     53                     txtSend.Clear();
     54                     txtSend.Focus();
     55                 }
     56             }
     57             catch
     58             { }
     59         }
     60         private void txtSend_KeyDown(object sender, KeyEventArgs e)
     61         {
     62             if (e.KeyCode == Keys.Enter)
     63                 btnSend.PerformClick();
     64         }
     65 
     66         private void DoConnect()
     67         {
     68             if (String.IsNullOrEmpty(txtServer.Text.Trim()))
     69             {
     70                 MessageBox.Show("Please specify a server");
     71                 return;
     72             }
     73             if (String.IsNullOrEmpty(txtChannel.Text.Trim()))
     74             {
     75                 MessageBox.Show("Please specify a channel");
     76                 return;
     77             }
     78             if (String.IsNullOrEmpty(txtNick.Text.Trim()))
     79             {
     80                 MessageBox.Show("Please specify a nick");
     81                 return;
     82             }
     83 
     84             int port;
     85             if (Int32.TryParse(txtPort.Text, out port))
     86                 if (checkSSL.Checked)
     87                 {
     88                     client = new IrcClient(txtServer.Text.Trim(), port, true);
     89                 }
     90                 else {
     91                     client = new IrcClient(txtServer.Text.Trim(), port, false);
     92                 }
     93             else
     94                 client = new IrcClient(txtServer.Text.Trim());
     95 
     96             AddEvents();
     97             client.Nick = txtNick.Text.Trim();
     98 
     99             btnConnect.Enabled = false;
    100             txtChannel.Enabled = false;
    101             txtPort.Enabled = false;
    102             txtServer.Enabled = false;
    103             txtNick.Enabled = false;
    104             rtbOutput.Clear(); // in case they reconnect and have old stuff there
    105 
    106 
    107             client.Connect();
    108         }
    109         private void DoDisconnect()
    110         {
    111 
    112             btnConnect.Enabled = true;
    113             txtChannel.Enabled = true;
    114             txtPort.Enabled = true;
    115             txtServer.Enabled = true;
    116             txtNick.Enabled = true;
    117 
    118             lstUsers.Items.Clear();
    119             txtSend.Enabled = false;
    120             btnSend.Enabled = false;
    121 
    122             client.Disconnect();
    123             client = null;
    124 
    125             btnConnect.Text = "连接";
    126         }
    127         private void AddEvents()
    128         {
    129             client.ChannelMessage += client_ChannelMessage;
    130             client.ExceptionThrown += client_ExceptionThrown;
    131             client.NoticeMessage += client_NoticeMessage;
    132             client.OnConnect += client_OnConnect;
    133             client.PrivateMessage += client_PrivateMessage;
    134             client.ServerMessage += client_ServerMessage;
    135             client.UpdateUsers += client_UpdateUsers;
    136             client.UserJoined += client_UserJoined;
    137             client.UserLeft += client_UserLeft;
    138             client.UserNickChange += client_UserNickChange;
    139         }
    140         private void AddToChatWindow(string message)
    141         {
    142             rtbOutput.AppendText(message + "
    ");
    143             rtbOutput.ScrollToCaret();
    144         }
    145 
    146         #region Event Listeners
    147 
    148         void client_OnConnect(object sender, EventArgs e)
    149         {
    150             txtSend.Enabled = true;
    151             txtSend.Focus();
    152             btnSend.Enabled = true;
    153 
    154             btnConnect.Text = "Disconnect";
    155             btnConnect.Enabled = true;
    156 
    157             if (txtChannel.Text.StartsWith("#"))
    158                 client.JoinChannel(txtChannel.Text.Trim());
    159             else
    160                 client.JoinChannel("#" + txtChannel.Text.Trim());
    161 
    162         }
    163 
    164         void client_UserNickChange(object sender, UserNickChangedEventArgs e)
    165         {
    166             lstUsers.Items[lstUsers.Items.IndexOf(e.Old)] = e.New;
    167         }
    168 
    169         void client_UserLeft(object sender, UserLeftEventArgs e)
    170         {
    171             lstUsers.Items.Remove(e.User);
    172         }
    173 
    174         void client_UserJoined(object sender, UserJoinedEventArgs e)
    175         {
    176             lstUsers.Items.Add(e.User);
    177         }
    178 
    179         void client_UpdateUsers(object sender, UpdateUsersEventArgs e)
    180         {
    181             lstUsers.Items.Clear();
    182             lstUsers.Items.AddRange(e.UserList);
    183             
    184         }
    185 
    186         void client_ServerMessage(object sender, StringEventArgs e)
    187         {
    188             Console.WriteLine(e.Result);
    189         }
    190 
    191         void client_PrivateMessage(object sender, PrivateMessageEventArgs e)
    192         {
    193             AddToChatWindow("PM FROM " + e.From + ": " + e.Message);
    194         }
    195 
    196         void client_NoticeMessage(object sender,NoticeMessageEventArgs e)
    197         {
    198             AddToChatWindow("NOTICE FROM " + e.From + ": " + e.Message);
    199         }
    200         
    201         void client_ExceptionThrown(object sender, ExceptionEventArgs e)
    202         {
    203             MessageBox.Show(e.Exception.Message);
    204         }
    205 
    206         void client_ChannelMessage(object sender, ChannelMessageEventArgs e)
    207         {
    208             AddToChatWindow(e.From + ": " + e.Message);
    209         }
    210 
    211         #endregion
    212         #region SSL
    213         private void checkSSL_CheckedChanged(object sender, EventArgs e)
    214         {
    215             if (checkSSL.Checked)
    216             {
    217                 MessageBox.Show("SSL IRC Usually opperates over port 6697!", "WARNING!");
    218             }
    219         }
    220         #endregion
    221 
    222         public static string Get(string url)
    223         {
    224             string result = "";
    225             HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    226             HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    227             Stream stream = resp.GetResponseStream();
    228             try
    229             {
    230                 //获取内容
    231                 using (StreamReader reader = new StreamReader(stream))
    232                 {
    233                     result = reader.ReadToEnd();
    234                 }
    235             }
    236             finally
    237             {
    238                 stream.Close();
    239             }
    240             return result;
    241         }
    242 
    243         void Tmr_Elapsed(object sender, ElapsedEventArgs e)
    244         {
    245             try
    246             {
    247                 int a = new Random().Next(0, 100);
    248                 sendmessage = "当前温度" + a.ToString();
    249                 //MessageBox.Show(sendmessage);
    250                 txtSend.Text = sendmessage;
    251                 btnSend_Click(sender, e);
    252             }
    253             catch
    254             { }
    255         }
    256 
    257         private void lstUsers_SelectedIndexChanged(object sender, EventArgs e)
    258         {
    259             
    260         }
    261 
    262         private void LabelServer_Click(object sender, EventArgs e)
    263         {
    264             System.Timers.Timer maxTimer = new System.Timers.Timer();
    265             maxTimer.Elapsed += new ElapsedEventHandler(Tmr_Elapsed);
    266             // 设置引发时间的时间间隔 此处设置为1秒(1000毫秒)
    267             maxTimer.Interval = 1000;
    268             maxTimer.Enabled = true;
    269             
    270         }
    271     }
    272 }
  • 相关阅读:
    oracle 分配表权限给用户的写法
    任务的一种写法:
    解决oracle 32位64位的问题
    设计模式学习
    Nginx 相关介绍
    (2) html 语义化
    (1)HTML5的常用新特性你必须知道
    less初学手记
    如何修改chrome记住密码后自动填充表单的黄色背景 ?
    HTML的水平居中和垂直居中解决方案
  • 原文地址:https://www.cnblogs.com/dXIOT/p/10002142.html
Copyright © 2011-2022 走看看