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 }
  • 相关阅读:
    time 模块学习
    day 14 自定义模块,常用模块 time .datetime ,time 模块
    day 13 课后作业
    day 12 课后作业
    day 11课后作业
    树状数组最值
    hdu 1059 Dividing bitset 多重背包
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    最长公共子序列板/滚动 N^2
    Uva 10635
  • 原文地址:https://www.cnblogs.com/dXIOT/p/10002142.html
Copyright © 2011-2022 走看看