使用c#实现tcp的连接和发送接收数据
最近有个小项目,需要调用装置的录波数据,使用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的连接和发送接收数据相关推荐
- 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制...
安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程? 详细代码介 ...
- Android发送接收WiFi,安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制,安卓openwrt...
安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制,安卓openwrt 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片 ...
- 应用服务器与数据库之间是长连接,要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?...
在服务器建立服务端,与多个 tcp 连接保持长连接,服务端会根据客户端发送的 token 验证确定是否保持长连接建立"session"缓存, 在某个状态开启时(我称为存储状态),要 ...
- Python3树莓派连接阿里云物联网设备发送接收数据
Python3连接阿里云物联网设备发送接收数据(树莓派) 阿里云物联网IOT 代码部分 库文件 Windows下安装环境 树莓派安装环境 可能遇到的错误 代码 效果展示 阿里云物联网IOT 首先,准备 ...
- 微信小程序连接蓝牙 并分包发送 接收数据完整版
微信小程序连接蓝牙并分包发送接收数据 初始化蓝牙 初始化蓝牙设备 搜索蓝牙设备 连接蓝牙设备 获取蓝牙设备所有service(支持读写的) 向蓝牙发送数据 断开蓝牙 停止搜索蓝牙 转16进制 Arra ...
- 求android 中串口的发送接收数据代码
RT,求高手帮忙! 就是 /dev/ttyS0 和/dev/ttyS1 两个设备的通信问题.. 同求~ 这个是不是需要串口驱动啊?最近正在搞这个串口通信的案子,头疼 同样也没有搞出来,老是报:不能扫描 ...
- C#利用SerialPort类对串口发送接收数据
1.连接串口方法 SerialPort ser = new SerialPort();//也可以在工具箱中直接拖SerialPort控件 public void OpenCom() {try{//波特 ...
- 无线433发送接收数据测试程序原理,有杂波解决方案
无线433发送接收测试程序 433Mhz无线通信相关知识不做介绍,网上很多避坑:MCU的接收引脚Data脚,是否配置上拉要参考MCU内部上拉电阻的大小,使用时最好拿示波器测量高低电平对应的电压. 此测 ...
- STM32F407 CAN模块发送接收数据异常
现象: 1.CAN模块初始化成CAN_MODE_LOOPBACK模式 CAN模块通过HAL_CAN_AddTxMessage发送数据时,TX管脚能够发出数据,示波器也可以测量到数据波形,CAN使用中断 ...
最新文章
- java简单计算_java简单计算器
- POI学习笔记 自定义颜色
- webService学习记录
- 栈大小和内存分部问题
- 计算机硬件配置组件,配置vcenter server的硬件(默认指windows版本的)
- mt4 不显示服务器速度,mt4上面怎么显示时间?
- 使用docker安装fastDFS
- LVM: Logical Volume Manager 逻辑卷管理
- SVProgressHUD的使用
- FFT海水模拟(又来了-_-b)
- 数据清洗+特征构造:bureau.csv
- 黄杏元《地理信息系统概论》考研复习考点精讲(五)
- 基于java(ssm)校园办公室报修管理系统(java毕业设计)
- 《游测攻坚日记》-- 黑盒测试1
- 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校
- python wms系统源码_java开发的wms仓库管理系统源码(PC+Android)
- w8系统桌面没有计算机图标,不见了win8系统桌面图标怎么办
- 华为区块链项目总监: 华为区块链率先于溯源场景落地
- 解决龙格现象matlab,matlab实现Lagrange多项式插值观察龙格现象
- HTML5实现一个时钟动画