usingSystem;usingSystem.Windows.Forms;usingSystem.IO.Ports;usingSystem.IO;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Threading;usingSystem.Text;namespaceSocket串口
{public partial classFrmMain : Form
{publicFrmMain()
{
InitializeComponent();
}///
///打开软件加载项目///
///
///
private void FrmMain_Load(objectsender, EventArgs e)
{
SerialPort();//加载系统当前可用的串口
Control.CheckForIllegalCrossThreadCalls = false;
}#region 串口部分
#region 定义变量SerialPort sp= newSerialPort();bool isOpen = false;//打开串口标志位
#endregion
///
///加载当前系统当中可用的串口///
voidSerialPort()
{string[] ports =System.IO.Ports.SerialPort.GetPortNames();if (ports == null)
{
MessageBox.Show("本机没有串口!");
}foreach (string port inSystem.IO.Ports.SerialPort.GetPortNames())
{
cbx_Port.Items.Add(port);
}//添加波特率
cbx_Baude_Rate.Items.Add("1200");
cbx_Baude_Rate.Items.Add("2400");
cbx_Baude_Rate.Items.Add("4800");
cbx_Baude_Rate.Items.Add("9600");
cbx_Baude_Rate.Items.Add("19200");
cbx_Baude_Rate.Items.Add("38400");
cbx_Baude_Rate.Items.Add("43000");
cbx_Baude_Rate.Items.Add("56000");
cbx_Baude_Rate.Items.Add("57600");
cbx_Baude_Rate.Items.Add("115200");
cbx_Baude_Rate.SelectedIndex= 3;
cbx_Port.SelectedIndex= 0;
}#region 打开和关闭串口资源
private voidSetPortProperty()
{
sp.PortName=cbx_Port.Text.Trim();
sp.BaudRate=Convert.ToInt32(cbx_Baude_Rate.Text.Trim());
sp.StopBits=StopBits.One;
sp.DataBits= Convert.ToInt16(8);
sp.Parity=Parity.None;
sp.ReadTimeout= -1;//超读时间
sp.RtsEnable = true;//定义一个串口接受数据 触发事件
sp.DataReceived += newSerialDataReceivedEventHandler(sp_DataReceived);
}voidopenSerialPort()
{try{
sp.Open();
}catch{
MessageBox.Show("打开失败!");
}
}voidcloseSerialPort()
{try{
sp.Close();
}catch{
MessageBox.Show("关闭失败!");
}
}private void btn_Open_Port_Click(objectsender, EventArgs e)
{if (isOpen == false)
{
SetPortProperty();
openSerialPort();
isOpen= true;
}
}///
///串口接收字符事件///
///
///
private void sp_DataReceived(objectsender, SerialDataReceivedEventArgs e)
{string ReadStr = "";
ReadStr=sp.ReadExisting();
Show_Port_Msg(socketSend.RemoteEndPoint+ ":" +ReadStr);
}void Show_Port_Msg(stringstr)
{if(txt_Port_Recv.TextLength>300)
{
txt_Port_Recv.Clear();
}
txt_Port_Recv.AppendText(str+ "\r\n");
}private void btn_Close_Port_Click(objectsender, EventArgs e)
{if (isOpen == true)
{
closeSerialPort();
isOpen= true;
sp.Dispose();
}
}#endregion
///
///在串口接收窗口显示当前接收到的数据///
/// 接收到的具体数据
public void ShowTxt(stringa)
{this.txt_Port_Recv.AppendText(DateTime.Now.ToString() + "|" + a + "\n");if (txt_Port_Recv.TextLength > 300)
{
txt_Port_Recv.Clear();
}
}#region 发送窗口是否有数据 bool类型 CheckSendData()
private bool CheckSendData()//检查发送数据窗口是否有数据
{if (txt_Port_Send.Text.Trim() == "") return false;return true;
}private void btn_Com_Port_Send_Click(objectsender, EventArgs e)
{try{if(isOpen)
{string str =txt_Port_Send.Text.Trim();byte[] buffer =System.Text.Encoding.UTF8.GetBytes(str);
sp.WriteLine(str);
}else{
MessageBox.Show("请打开串口!");
}
}catch{ }
}#endregion
#region 发送串口数据 btn_Send_Click事件
private void btnSend_Click(object sender, EventArgs e)//发送串口数据
{if (isOpen)//写串口数据
{if (!CheckSendData())//检测要发送的数据
{
MessageBox.Show("请输入要发送的数据!", "错误提示");return;
}else{try{
sp.WriteLine(txt_Port_Send.Text.Trim());
}catch(Exception)
{
MessageBox.Show("发送数据时发生错误!", "错误提示");return;
}
}
}else{
MessageBox.Show("串口未打开!", "错误提示");return;
}
}#endregion
#endregion
#region socket部分
#region Socket相关的定义变量Socket socketSend;#endregion
///
///Socket发送数据///
///
///
private void btn_Send_Click(objectsender, EventArgs e)
{string str =txt_Socket_Send.Text.Trim();byte[] buffer =System.Text.Encoding.UTF8.GetBytes(str);
socketSend.Send(buffer);
}///
///建立Socket连接///
///
///
private void btn_Start_Click(objectsender, EventArgs e)
{try{
socketSend= newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip=IPAddress.Parse(txt_IP.Text);
IPEndPoint point=newIPEndPoint(ip,Convert.ToInt32(txt_Port.Text.Trim()));
socketSend.Connect(point);
ShowMsg("连接成功!");
Thread th=newThread(Recive);
th.IsBackground=true;
th.Start();
}catch{ }
}void ShowMsg(stringstr)
{if (txt_Socket_Reccv.TextLength>300)
{
txt_Socket_Reccv.Clear();
}
txt_Socket_Reccv.AppendText(str+ "\r\n");
}///
///不停的接受服务器发来的消息///
voidRecive()
{while (true)
{try{byte[] buffer = new byte[1024 * 1024 * 3];int r =socketSend.Receive(buffer);//实际接收到的有效字节数
if (r == 0)
{break;
}string s = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint+ ":" +s);
}catch{ }
}
}#endregion}
}