当前位置:  互联网>综合
本页文章导读:
    ▪C#基于SOCKET通信开发的Telnet模拟工具      最近在折腾网络方面的通讯协议,每次熟悉协议的时候,总是习惯用telnet来测试,但是在测试的过程中,很纠结的是,有的地方输入不能 出错,一出错就得重新输入,而且还不能像CMD命令一.........
    ▪Ubuntu小私房(3)--Linux系统目录结构       Linux目录结构是Linux学习者必须了解的知识,Linux的目录与Windows又有很大的不同,所以搞清楚Linux目录结构是关键。 Linux文件类型 (部分转自ChinaBytel)   目录文件:包括文件名、.........
    ▪通信系统概论---模拟与数字信号基础      一 模拟与数字 1. 数据:各种需要传输和处理的信息(文字,图像、声音、动作等)。 模拟数据:具有可连续变化的值,通常用各种测量单位表示(时间、身高、体重、温度、教师上课的声.........

[1]C#基于SOCKET通信开发的Telnet模拟工具
    来源: 互联网  发布时间: 2013-10-26
最近在折腾网络方面的通讯协议,每次熟悉协议的时候,总是习惯用telnet来测试,但是在测试的过程中,很纠结的是,有的地方输入不能

出错,一出错就得重新输入,而且还不能像CMD命令一样,可以通过方向键回到之前的输入。在痛苦了多次后,决定做一个类似Telnet功能的

模拟工具,更确切的说是基于SOCKET的网络通信工具,以便更好的进行SMTP/POP3/IMAP的测试。实现在的关键代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using UtilSp.ClassLib;
using System.Linq.Expressions;
using System.Threading;

namespace SocketLink
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private Socket socket_ = null;
        private Helper helper_ = new Helper();//In order to automatically update data to UI with binding property.
        private int receiveLen_max_ = 0xFFFF;
        private Thread receiveThread_ = null;
        private Encoding receiveEncoding_ = Encoding.UTF8;
        private bool needConvertBase64Received_ = false;
        private string lineBreak_ = "\r\n";

        private void buttonConnect_Click(object sender, EventArgs e)
        {
            try
            {
                string host = textBoxHost.Text;
                string port = textBoxPort.Text;
                if (string.IsNullOrEmpty(host))
                {
                    showMessage(Tip.hostEmpty);
                    return;
                }

                if (string.IsNullOrEmpty(port))
                {
                    showMessage(Tip.portEmpty);
                    return;
                }

                if (!IpPortSp.isPort(port))
                {
                    MessageBox.Show(Tip.portIllegal);
                    return;
                }


                socket_ = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                socket_.Connect(host, Convert.ToInt32(port));
                if (!socket_.Connected)
                {
                    showBackInfo(Tip.connectFail);
                    return;
                }

                receiveThread_ = new Thread(receiveCallBack);//Create thread to listen receive from socket.
                receiveThread_.IsBackground = true;
                receiveThread_.Start();

                helper_.connectEnabled_pro = false;
                helper_.disconnectEnabled_pro = true;
                helper_.sendEnabled_pro = true;
                showBackInfo(Tip.connectOK);
            }
            catch (System.Exception ex)
            {
                showBackInfo(ex.Message);
            }
        }

        private void showMessage(string message)
        {
            MessageBox.Show(message);
        }

        private void showBackInfo(string backInfo, bool isNeedInvoke = false)
        {
            if (isNeedInvoke)
            {
                this.Invoke((Action)(() =>
                {
                    helper_.backInfo_pro += backInfo + "\r\n";                    
                }));
            }
            else
            {
                helper_.backInfo_pro += backInfo + "\r\n";
            }
        }

        public class Helper : INotifyPropertyChanged //Automatically update UI data class
        {
            #region backInfo Property
            private string backInfo_ = "";
            public string backInfo_pro
            {
                get
                {
                    return backInfo_;
                }
                set
                {

                    if (value == backInfo_)
                    {
                        return;
                    }
                    backInfo_ = value;
                    NotifyPropertyChanged(() => backInfo_pro);
                }
            }
            #endregion

            #region connectEnabled Property
            private bool connectEnabled_ = true;
            public bool connectEnabled_pro
            {
                get
                {
                    return connectEnabled_;
                }
                set
                {

                    if (value == connectEnabled_)
                    {
                        return;
                    }
                    connectEnabled_ = value;
                    NotifyPropertyChanged(() => connectEnabled_pro);
                }
            }
            #endregion

            #region backInfo NotifyPropertyChanged
            public void NotifyPropertyChanged<T>(Expression<Func<T>> property)
            {
                if (PropertyChanged == null)
                {
                    return;
                }
                var memberExpression = property.Body as MemberExpression;
                if (memberExpression == null)
                {
                    return;
                }

                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
            }

            public event PropertyChangedEventHandler PropertyChanged;
            #endregion

            #region disconnectEnabled Property
            private bool disconnectEnabled_ = false;
            public bool disconnectEnabled_pro
            {
                get
                {
                    return disconnectEnabled_;
                }
                set
                {

                    if (value == disconnectEnabled_)
                    {
                        return;
                    }
                    disconnectEnabled_ = value;
                    NotifyPropertyChanged(() => disconnectEnabled_pro);
                }
            }
            #endregion

            #region sendEnabled Property
            private bool sendEnabled_ = false;
            public bool sendEnabled_pro
            {
                get
                {
                    return sendEnabled_;
                }
                set
                {

                    if (value == sendEnabled_)
                    {
                        return;
                    }
                    sendEnabled_ = value;
                    NotifyPropertyChanged(() => sendEnabled_pro);
                }
            }
            #endregion
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            initializeUI();
            binding();
        }

        private void binding()//Binding property with helper_ and automatically update data. 
        {
            textBoxInfo.DataBindings.Add("Text", helper_, "backInfo_pro");
            buttonConnect.DataBindings.Add("Enabled", helper_, "connectEnabled_pro");
            buttonDisconnect.DataBindings.Add("Enabled", helper_, "disconnectEnabled_pro");
            buttonSend.DataBindings.Add("Enabled", helper_, "sendEnabled_pro");
        }

        private void initializeUI()
        {
            comboBoxSendEncoding.SelectedIndex = 2;
            comboBoxReceiveEncoding.SelectedIndex = 2;
        }

        private void buttonDisconnect_Click(object sender, EventArgs e)
        {
            try
            {
                if (socket_ == null)
                {
                    return;
                }
                socket_.Close();
                if (socket_ == null)
                {
                    this.showBackInfo(Tip.disconnectFail);
                }
                else
                {
                    helper_.connectEnabled_pro = true;
                    helper_.disconnectEnabled_pro = false;
                    helper_.sendEnabled_pro = false;
                    this.showBackInfo(Tip.disconnectOK);
                }

            }
            catch (System.Exception ex)
            {
                this.showBackInfo(ex.Message);
            }
        }

        private void buttonSend_Click(object sender, EventArgs e)
        {
            try
            {
                string sendStr = textBoxSendData.Text;
                if (string.IsNullOrEmpty(sendStr))
                {
                    showBackInfo(Tip.sendDataEmpty);
                    return;
                }

                if (!socket_.Connected)
                {
                    showBackInfo(Tip.notConnect);
                    return;
                }

                showBackInfo(Tip.sending);
                string sendEncodingName = comboBoxSendEncoding.Text;
                if (string.IsNullOrEmpty(sendEncodingName))
                {
                    showBackInfo(Tip.sendEncodingEmpty);
                    return;
                }

                string receiveEncodingName = comboBoxReceiveEncoding.Text;
                if (string.IsNullOrEmpty(receiveEncodingName))
                {
                    showBackInfo(Tip.receiveEncodingEmpty);
                    return;
                }
                Encoding sendEncoding = Encoding.GetEncoding(sendEncodingName);
                receiveEncoding_ = Encoding.GetEncoding(receiveEncodingName);
                sendStr += checkBoxAutoAddLineBreak.Checked ? lineBreak_ : "";//Automaticall add line break.SMTP/POP3/IMAP need.
                byte[] sendData = null;
                if (checkBoxToBase64.Checked)
                {
                    sendData = Base64Sp.tobase64Bytes(sendStr, sendEncoding);
                }
                else
                {
                    sendData = sendEncoding.GetBytes(sendStr);
                }
                socket_.Send(sendData);
                showBackInf      
    
[2]Ubuntu小私房(3)--Linux系统目录结构
    来源: 互联网  发布时间: 2013-10-26


Linux目录结构是Linux学习者必须了解的知识,Linux的目录与Windows又有很大的不同,所以搞清楚Linux目录结构是关键。



Linux文件类型

(部分转自ChinaBytel)


  linux有四种基本文件系统类型:普通文件、目录文件、连续文件和特殊文件。可以用file命令来识别。

  普通文件:如文本文件、c语言源代码、shell脚本等,可以用cat、less、more、vi等来察看内容,用mv来改名。

  目录文件:包括文件名、子目录名及其指针。可以用ls列出目录文件

  链接文件:是指向一索引节点的那些目录条目,用ls来查看时,链接文件的标志用l开头,而文件后以"->"指向所链接的文件

  特殊文件:如磁盘、终端、打印机等都在文件系统中表示出来,常放在/etc目录内。例如:软驱A称为/dev/fd0,/dev/had来自第一硬                        盘。


Linux目录结构
目录结构图




详细解释


. / 
/目录也称为根目录,位于linux文件系统目录结构的顶层。在很多系统中的唯一分区。如果还有其他分区,必须挂在到/目录下某个位置。整个目录结构呈树型结构,因此也称为目录树。 
2. bin 
bin目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等,该目录不能包含子目录。 
3. boot 
boot目录,该目录中存放系统的内核文件和引导装载程序文件。例如:RHEL5的内核文件:vmlinuz-2.6.18-8.el5xen。 
4. dev 
dev目录,也称设备(device)文件目录,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等。 
5. etc 
etc目录存放系统的大部分配置文件和子目录。X Window系统的文件保存在/etc/X11子目录中,与网络有关的配置文件保存在/etc/sysconfig子目录中。该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。 
6. home 
home目录中包含系统上各个用户的主目录,子目录名称即为各用户名。 
7. lib 
lib目录下存放了各种编程语言库。典型的linux系统包含了C、C++和FORTRAN语言的库文件。用好这些语言开发的应用程序可以是使用这些库文件。这就使软件开发者能够利用那些预先写好并测试过的函数。/lib目录下的库映像文件可以用来启动系统并执行一些命令。目录/lib/modules包含了可加载的内核模块。/lib目录存放了所有重要的库文件,其他的库文件爱你则大部分存放在/usr/lib目录下。 
8. lost+found 
lost+found目录,在EXT2或EXT3文件系统中,当系统意外崩溃或机器意外关机,产生的一些文件碎片放在这里。在系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方法来修复,或者移动文件到运来的位置上。 
9. opt 
opt目录表示的是可选择的意思,有些软件包也会被安装在这里,某些第三方应用程序通常安装在这个目录。 
10. root 
root目录为系统管理员的主目录。 
11. usr 
usr目录是linnux系统中最大的系统之一,很多系统中,该目录是最为独立分区挂载的。该目录中主要存放不经常变化的数据,以及系统下安装的应用程序目录。 
12. mnt 
mnt目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如floppy,cdrom。这样当挂载了一个设备如光驱时,就可以通过访问目录/mnt/cdrom下的文件来访问相应的光驱上的文件了。 
13. proc 
proc目录是一个虚拟的文件系统,该目录中的文件是内存中过的映像。可以通过查看该目录中的文件过去有关系统硬件运行的详细信息,例如使用more或者less命令查看/proc/interrupts文件以获取硬件中断(IRQ)信息,查看/proc/cpuinfo文件以获取CPU的型号、主频等信息。 
14. sbin 
sbin目录下保存系统管理员或者root用户的命令文件。/usr/sbin存放了应用软件,/usr/local/sbin存放了通用的根用户权限的命令。 
. / 
/目录也称为根目录,位于linux文件系统目录结构的顶层。在很多系统中的唯一分区。如果还有其他分区,必须挂在到/目录下某个位置。整个目录结构呈树型结构,因此也称为目录树。 
2. bin 
bin目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等,该目录不能包含子目录。 
3. boot 
boot目录,该目录中存放系统的内核文件和引导装载程序文件。例如:RHEL5的内核文件:vmlinuz-2.6.18-8.el5xen。 
4. dev 
dev目录,也称设备(device)文件目录,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等。 
5. etc 
etc目录存放系统的大部分配置文件和子目录。X Window系统的文件保存在/etc/X11子目录中,与网络有关的配置文      
    
[3]通信系统概论---模拟与数字信号基础
    来源: 互联网  发布时间: 2013-10-26

一 模拟与数字

1. 数据:各种需要传输和处理的信息(文字,图像、声音、动作等)。

模拟数据:具有可连续变化的值,通常用各种测量单位表示(时间、身高、体重、温度、教师上课的声音等)

数字数据:具有离散值且可以计数的(听课同学的人数,教室电灯开关的状态等)

2. 信号:数据的电气或电磁表示方式

模拟信号:信号波形随时间连续变化;

数字信号:瞬时跳变直方形; 


二 周期模拟信号

1. 正弦波


2. 傅里叶分析:任何电磁信号都可以看做是由不同频率成分组成,即由一组不同振幅、频率和相位的正弦波构造而成(叠加)。

傅立叶分析使用的两种技术

傅里叶变换:用于非周期性信号

傅里叶级数: 用于周期性信号

3. 频谱与带宽

信号的频谱:信号所包含的频率范围;

带宽:频谱的宽度(最高频率减最低频率);


三 数字信号

1. 二进制信号

比特率用来反映数字信号的数据传输速率,即每秒传送的比特数(二进制数位数),单位:bps (b/s) 或 Mbps;

在计算机网络传输中,所需带宽与比特率成正比;更高比特率要求更高的带宽;

2. 基带传输


3.宽带传输



四 传输减损

传输减损:收方收到的信号与发送方发送的信号不相同。

对模拟信号,主要表现为信号品质下降;

对数字信号,主要表现为产生位错(比特反置,即 0 → 1 或 1 → 0);

造成“减损”的原因 :衰减(采用中继器), 时延失真 ,噪声


五计算数据速率极值



六 性能指标


作者:ALL_Dash 发表于2013-7-26 9:47:55 原文链接
阅读:5 评论:0 查看评论

    
最新技术文章:
▪用户及权限基础 2---- Linux权限    ▪用户及权限基础 3---- Linux扩展权限    ▪git 简明教程(1) --创建及提交
▪背包 代码    ▪json对象的封装与解析    ▪01背包,完全背包,多重背包 ,模板代码
▪apache安装详解    ▪HDU 4668 Finding string (解析字符串 + KMP)    ▪《TCP-IP详解 卷1:协议》学习笔记(二)
▪《TCP-IP详解 卷1:协议》学习笔记(持续更新...    ▪windows下使用swig    ▪gensim试用
▪Linux Shell脚本编程--nc命令使用详解    ▪solr对跨服务器表联合查询的配置    ▪递归和非递归实现链表反转
▪Linux磁盘及文件系统管理 1---- 磁盘基本概念    ▪Cholesky Decomposition    ▪HTTP协议学习
▪用C语言写CGI入门教程    ▪用hdfs存储海量的视频数据的设计思路    ▪java多线程下载的实现示例
▪【原创】eAccelerator 一个锁bug问题跟踪    ▪hadoop学习之ZooKeeper    ▪使用cuzysdk web API 实现购物导航类网站
▪二维数组中的最长递减子序列    ▪内嵌W5100的网络模块WIZ812MJ--数据手册    ▪xss 跨站脚本攻击
▪RobotFramework+Selenium2环境搭建与入门实例    ▪什么是API    ▪用PersonalRank实现基于图的推荐算法
▪Logtype    ▪关于端口号你知道多少!    ▪Linux基本操作 1-----命令行BASH的基本操作
▪CI8.7--硬币组合问题    ▪Ruby on Rails 学习(五)    ▪如何使用W5300实现ADSL连接(二)
▪不允许启动新事务,因为有其他线程正在该会...    ▪getting start with storm 翻译 第六章 part-3    ▪递归求排列和组合(无重复和有重复)
▪工具类之二:RegexpUtils    ▪Coding Interview 8.2    ▪Coding Interview 8.5
▪素因子分解 Prime factorization    ▪C# DllImport的用法    ▪图的相关算法
▪Softmax算法:逻辑回归的扩展    ▪最小生成树---Kruskal算法---挑战程序设计竞赛...    ▪J2EE struts2 登录验证
▪任意两点间的最短路径---floyd_warshall算法    ▪Sqoop实现关系型数据库到hive的数据传输    ▪FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream...
▪Ubuntu 13.04 – Install Jetty 9    ▪TCP/IP笔记之多播与广播    ▪keytool+tomcat配置HTTPS双向证书认证
▪安装phantomjs    ▪Page Redirect Speed Test    ▪windows media player 中播放pls的方法
▪sre_constants.error: unbalanced parenthesis    ▪http headers    ▪Google MapReduce中文版
▪The TCP three-way handshake (connect)/four wave (closed)    ▪网站反爬虫    ▪Log4j实现对Java日志的配置全攻略
▪Bit Map解析    ▪Notepad 快捷键 大全    ▪Eclipse 快捷键技巧 + 重构
▪win7 打开防火墙端口    ▪Linux Shell脚本入门--awk命令详解    ▪Linux Shell脚本入门--Uniq命令
▪Linux(Android NDK)如何避免僵死进程    ▪http Content-Type一览表    ▪Redis实战之征服 Redis + Jedis + Spring (二)
▪Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源...    ▪利用SQOOP将ORACLE到HDFS    ▪django输出 hello world
▪python re    ▪unity3D与网页的交互    ▪内存共享基本演示
▪python join    ▪不再为无限级树结构烦恼,且看此篇    ▪python实现变参
▪打开文件数限制功能不断地制造问题    ▪Arduino Due, Maple and Teensy3.0 的 W5200性能测试    ▪Selenium实例----12306网站测试
▪基于协同过滤的推荐引擎    ▪C4.5决策树    ▪C#HTTP代理的实现之注册表实现
▪nosql和关系型数据库比较?    ▪如何快速比较这两个字符串是否相等?    ▪hdoj 1863 畅通工程 最小生成树---prime算法
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3