#搞单片机用到W5500网络芯片,又要跟电脑进行通讯, 上位用C#写的,所以自己学了学,也算是小抄袭大佬们的代码吧,感觉挺简单的,分享一下
先看下如何使用:
TCP_Client里面的参数是传进去的,根据项目自己去加
m_device = new TCP_Client(textBox_IP.Text, int.Parse(textBox_Port.Text));
if (m_device.Connect() != "OK")
{
MessageBox.Show("连接失败");
}
else
{
label_state.Text = "TCP已连接";
}
接收:
textBox_reve.Text = m_device.Rece();//定义一个字符串接收
发送:
m_device.Send(textBox_info.Text);//实参传入需要发送的字符串
#下面附上驱动代码端:
##TCP通讯过程就不细说了,直接上代码了,我的备注感觉也挺清晰的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace TCP_Device
{
public class TCP_Client
{
private Socket socketSend;
private string ip = ""; //定义IP号
private int port = 0;//定义端口号
string client_send_str = "";
public TCP_Client(string client_ip, int client_port)
{
ip = client_ip;
port = client_port;
}
public string Connect()//连接
{
string ret = "OK";
try
{
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAdress = IPAddress.Parse(ip);
IPEndPoint point = new IPEndPoint(ipAdress, port);
IAsyncResult connResult = socketSend.BeginConnect(point, null, null);
connResult.AsyncWaitHandle.WaitOne(1000, true); //等待1秒
if(!connResult.IsCompleted)
{
return ret = "连接失败";
}
//socketSend.Connect(point);
//开启新的线程,不停的接收服务器发来的消息
Thread c_thread = new Thread(Received);
c_thread.IsBackground = true;
c_thread.Start();
}
catch (Exception ex)
{
ret = ex.Message;
}
return ret;
}
public string DisConnect()//关闭连接
{
string ret = "OK";
try
{
if (socketSend.Connected)
{
socketSend.Close();
}
}
catch(Exception ex)
{
ret = ex.Message;
}
return ret;
}
/// <summary>
/// 接收线程
/// </summary>
private void Received()//接收
{
while (true)
{
try
{
if (!socketSend.Connected) return;
byte[] buffer = new byte[1024 * 1024 * 3];
//实际接收到的有效字节数
int len = socketSend.Receive(buffer);
if (len == 0)
{
break;
}
client_send_str = Encoding.UTF8.GetString(buffer, 0, len);
}
catch (Exception ex)
{
}
}
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="str"></param>
public string Send(string str)
{
string ret = "OK";
try
{
if (socketSend == null)
{
ret = "TCP未连接";
return ret;
}
byte[] buffer = Encoding.UTF8.GetBytes(str);
socketSend.Send(buffer);
}
catch (Exception ex)
{
ret = ex.Message;
}
return ret;
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="str"></param>
public string Rece(ref string buffer)
{
string ret = "";
if (!socketSend.Connected)
{
ret = "TCP未连接";
return ret ;
}
ret = buffer;
buffer = null;
return ret;
}
public string Rece()
{
return Rece(ref client_send_str);
}
/// <summary>
/// 用于实时监测客户端是否断开连接
/// </summary>
}
}