最近有个小项目,需要调用装置的录波数据,使用tcp模式,在这里整理了下如何使用c#实现tcp连接并实现发送接收数据,分享出来。
我这里使用的tcpclient ,终端是tcpserver模式。
首先自定义一个类 clientsocket
class clientsocket  //tcp客户端的类  增加一个client104类
{
    public Socket newclient;
    public bool Connected;
    public Thread myThread;
    public delegate void MyInvoke(string str);
    public string send_str,receive_str;//发送字符串,接收字符串
    public string stringdata="";
    public int hexflag=1;               //十六进制标志
    public int sendlen = 0;             //发送长度,用户每次发送的字节个数使用
    private StringBuilder builder = new StringBuilder();
    public byte[] buffer = new byte[4096];
    public List<byte> data = new List<byte>();
    
    /// <summary>
    /// connect  网络连接
    /// </summary>
    /// <param name="ipadd"></param>
    /// <param name="port"></param>
    #region 连接ip,端口号
    public void Connect(string ipadd, int port)
    {
        byte[] data = new byte[1024];
        newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                   
        IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);
        try
        {
            newclient.Connect(ie);                
            Connected = true;
        }
        catch 
        {                
            Connected = false;
            return;
        }
        ThreadStart myThreaddelegate = new ThreadStart(Receivestr);
        myThread = new Thread(myThreaddelegate);
        myThread.Start();

}
    #endregion

#region 写log文件
    public int writeLogFile(string str)
    {
        string filePath = AppDomain.CurrentDomain.BaseDirectory + @"\run.log";
        if (File.Exists(filePath))
        {
            FileInfo fileInfo = new FileInfo(filePath);
            if (fileInfo.Length > 2000000)
                File.Delete(filePath);
        }

FileStream aFile = new FileStream(filePath, FileMode.OpenOrCreate | FileMode.Append);
        StreamWriter sw = new StreamWriter(aFile);
        DateTime tt = DateTime.Now;
        str = "[" + tt.ToString() + "]  " + str;
        sw.WriteLine(str);
        sw.Close();
        aFile.Close();
        return 1;
    }
    #endregion

/// <summary>
    /// receivestr   接收字符串
    /// </summary>
    #region 接收数据
    public void Receivestr()
    {
        receive_str = "";
        stringdata = "";
        int recv=0;            
        
        while (true)
        {
            if (!Connected) return;                
            try
            {
                recv = newclient.Receive(buffer);
                
                for (int i = 0; i < recv; i++)
                {
                    data.Add(buffer[i]);                        
                    receive_str += data[i].ToString("X2");                        
                }                    
                stringdata = Encoding.UTF8.GetString(buffer, 0, recv);                    
            }
            catch 
            {
                 return;
            }                
        }
    }
    #endregion

/// <summary>
    /// sendstr  发送字符串
    /// </summary>
    /// <param name="str"></param>
    /// <param name="hexflag"></param>
    #region 发送数据
    public void sendstr(string str,int hexflag)
    {
        if (!Connected) return;            
        int m_length = str.Length/2;
        
        byte[] data = new byte[m_length];
        if (hexflag == 0)
        {
            data = Encoding.UTF8.GetBytes(str);
        }
        else
        {
            int len = strtohexarray(str, data);
        }            
        try
        {
            sendlen = newclient.Send(data);                
        }
        catch 
        {                
            Connected = false;                
        }
        
    }
    #endregion

/// <summary>
    /// close  关闭网络
    /// </summary>
    #region 关闭
    public void close()
    {
        if (Connected)
        {
            newclient.Close();
        }
    }
    #endregion

/// <summary>
    /// strtohexarray  将字符串转换成byte[]
    /// </summary>
    /// <param name="str"></param>
    /// <param name="b"></param>
    /// <returns></returns>
    #region
    public int strtohexarray(string str,byte[] b)
    {
        int i = 0;
        if (str.Length % 2 != 0)
            str = str.Substring(0, str.Length - 1);
        for (i = 0; i < str.Length / 2; i++)
        {
            b[i] = System.Convert.ToByte(str.Substring(i * 2, 2), 16);
        }
        return i;
    }
    #endregion
}

在界面上首先需要输入ip地址=IP.Text ,端口号=ports
声明类
clientsocket csocket;//tcp 类
单击连接的时候 使用csocket.Connect(IP.Text,ports);
发送数据:
if(csocket.Connected)
    csocket.sendstr(send_str,0);//发送字符串
因为我这里是少量数据接收,并且只有发送数据后,终端才返回数据,所以我就简单的用定时来实现的。
private void timer1_Tick(object sender, EventArgs e)
{
    string returnstr = "";
    if (csocket == null)
        return;
    if (csocket.Connected)
    {
        if (csocket.receive_str.Length > 0)
        {
            returnstr = csocket.stringdata;
            //解释数据
            explain_data();
        }
    }
}
如果要完全实现自动化,还是建议使用线程模式,当连接成功后启动线程一致接收就可以了
以上是我的一个实现过程;
欢迎关注、点赞、转发!!!

使用c#实现tcp的连接和发送接收数据相关推荐

  1. 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制...

    安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程?  详细代码介 ...

  2. Android发送接收WiFi,安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制,安卓openwrt...

    安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制,安卓openwrt 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片 ...

  3. 应用服务器与数据库之间是长连接,要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?...

    在服务器建立服务端,与多个 tcp 连接保持长连接,服务端会根据客户端发送的 token 验证确定是否保持长连接建立"session"缓存, 在某个状态开启时(我称为存储状态),要 ...

  4. Python3树莓派连接阿里云物联网设备发送接收数据

    Python3连接阿里云物联网设备发送接收数据(树莓派) 阿里云物联网IOT 代码部分 库文件 Windows下安装环境 树莓派安装环境 可能遇到的错误 代码 效果展示 阿里云物联网IOT 首先,准备 ...

  5. 微信小程序连接蓝牙 并分包发送 接收数据完整版

    微信小程序连接蓝牙并分包发送接收数据 初始化蓝牙 初始化蓝牙设备 搜索蓝牙设备 连接蓝牙设备 获取蓝牙设备所有service(支持读写的) 向蓝牙发送数据 断开蓝牙 停止搜索蓝牙 转16进制 Arra ...

  6. 求android 中串口的发送接收数据代码

    RT,求高手帮忙! 就是 /dev/ttyS0 和/dev/ttyS1 两个设备的通信问题.. 同求~ 这个是不是需要串口驱动啊?最近正在搞这个串口通信的案子,头疼 同样也没有搞出来,老是报:不能扫描 ...

  7. C#利用SerialPort类对串口发送接收数据

    1.连接串口方法 SerialPort ser = new SerialPort();//也可以在工具箱中直接拖SerialPort控件 public void OpenCom() {try{//波特 ...

  8. 无线433发送接收数据测试程序原理,有杂波解决方案

    无线433发送接收测试程序 433Mhz无线通信相关知识不做介绍,网上很多避坑:MCU的接收引脚Data脚,是否配置上拉要参考MCU内部上拉电阻的大小,使用时最好拿示波器测量高低电平对应的电压. 此测 ...

  9. STM32F407 CAN模块发送接收数据异常

    现象: 1.CAN模块初始化成CAN_MODE_LOOPBACK模式 CAN模块通过HAL_CAN_AddTxMessage发送数据时,TX管脚能够发出数据,示波器也可以测量到数据波形,CAN使用中断 ...

最新文章

  1. java简单计算_java简单计算器
  2. POI学习笔记 自定义颜色
  3. webService学习记录
  4. 栈大小和内存分部问题
  5. 计算机硬件配置组件,配置vcenter server的硬件(默认指windows版本的)
  6. mt4 不显示服务器速度,mt4上面怎么显示时间?
  7. 使用docker安装fastDFS
  8. LVM: Logical Volume Manager 逻辑卷管理
  9. SVProgressHUD的使用
  10. FFT海水模拟(又来了-_-b)
  11. 数据清洗+特征构造:bureau.csv
  12. 黄杏元《地理信息系统概论》考研复习考点精讲(五)
  13. 基于java(ssm)校园办公室报修管理系统(java毕业设计)
  14. 《游测攻坚日记》-- 黑盒测试1
  15. 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校
  16. python wms系统源码_java开发的wms仓库管理系统源码(PC+Android)
  17. w8系统桌面没有计算机图标,不见了win8系统桌面图标怎么办
  18. 华为区块链项目总监: 华为区块链率先于溯源场景落地
  19. 解决龙格现象matlab,matlab实现Lagrange多项式插值观察龙格现象
  20. HTML5实现一个时钟动画

热门文章

  1. 语音合成android代码,百度 TTS 语音合成-Android
  2. 微软:外接 USB 设备或 SD 卡时将无法更新 Windows 1903
  3. 设置user-agent骗过服务端安全检查
  4. 微软无解!Win10用户突然减少:装回Win7
  5. 29个你必须知道的Linux命令
  6. UNICODE字符集表
  7. AI大牛纷纷离职!2021大厂AI Lab现状盘点,网友:名存实亡
  8. 架构与思维:设计容量,到底有多重要 ?
  9. 由浅入深C A S,小白也能与BAT面试官对线
  10. 京东这道面试题你会吗?