C# TCP通讯客户端源码

Posted 津津有味0202

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# TCP通讯客户端源码相关的知识,希望对你有一定的参考价值。


C#

C#


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;
using System.Net.Sockets;
using System.Threading;
using System.Management;

namespace TCPIP接口读卡器C井2010例子代码

public partial class Form8 : Form

private TcpClient tcpClient = null;
private IPAddress ipaddress;
int remortprot;
public Boolean connok;
private Thread thread;

Form1 f1;

public Form8()

InitializeComponent();



private void Form8_Load(object sender, EventArgs e)

f1 = (Form1)this.Owner;
f1.Refresh();

string connip = f1.textBox2.Text + "." + f1.textBox3.Text + "." + f1.textBox4.Text + "." + f1.textBox5.Text;
ipaddress = IPAddress.Parse(connip);
remortprot = Convert.ToInt32(f1.textBox8.Text);



private void button1_Click(object sender, EventArgs e)

if (button1.Text == "建立与读写器的TCP连接")

try

tcpClient = new TcpClient();
tcpClient.Connect(ipaddress, remortprot); //阻塞式同步通讯工作方式
if (tcpClient.Connected)

connok = true;
button1.Text = "断开与读写器的TCP连接";
panel1.Enabled = true;

thread = new Thread(new ThreadStart(this.ReceiveHandle));
thread.Start();


catch

MessageBox.Show("TCP连接失败,请确定MODBUS TCP读写器已经开启!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);


else

connok = false;
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;
tcpClient.Close();



private void ReceiveHandle()

string recestr;
int i;
try

while (connok)

byte[] bytes = new byte[100];
NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
int bytesRead = stream.Read(bytes, 0, bytes.Length); //读取返回信息

recestr = "FromIP:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑接收:";
for (i = 0; i < bytesRead; i++)

recestr = recestr + bytes[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

if (bytes[0] == 0x55 && bytes.Length>11)

switch (bytes[1])

case 0x05: ;
DialogResult dr = MessageBox.Show("读写器已执行一次读卡操作,是否要读出寄存器内数!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)

beginbuf.Value = 7;
button4_Click(button4, EventArgs.Empty);

break;
case 0x06: ;
recestr = "";
for (i = 9; i <= 9 + bytes[8];i++ )

recestr = recestr + bytes[i].ToString("X2") + " ";

textBox1.Text = recestr;

break;
case 0x08:;
if (beginbuf.Value >= 10)

DialogResult dr1 = MessageBox.Show(" 存放IC卡扇区数据的寄存器数据更改成功,是否要驱动读卡器执行写卡操作?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr1 == DialogResult.OK)

beginbuf.Value = 7;
button5_Click(button5, EventArgs.Empty);


break;





catch




private void button32_Click(object sender, EventArgs e)

byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x01;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x06; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = 0x02; //寄存器地址
sendbuf[10] = 0x00;
sendbuf[11] = (byte)(comboBox7.SelectedIndex + 1);

try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
//lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length);//将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString() .Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;



private void Form8_Load()

f1 = (Form1)this.Owner;
f1.Refresh();

string connip = f1.textBox2.Text + "." + f1.textBox3.Text + "." + f1.textBox4.Text + "." + f1.textBox5.Text;
ipaddress = IPAddress.Parse(connip);
remortprot = Convert.ToInt32(f1.textBox8.Text);


private void button2_Click(object sender, EventArgs e)

byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x02;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x06; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = (byte)(0x46 + comboBox8.SelectedIndex);

sendbuf[10] = (byte)(swithdely.Value / 256); //延时
sendbuf[11] = (byte)(swithdely.Value % 256);

try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length);//将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;




private void button34_Click(object sender, EventArgs e)

byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x03;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x06; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = (byte)(0x46 + comboBox8.SelectedIndex);

sendbuf[10] = 0x00; //延时
sendbuf[11] = 0x00;

try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length); //将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;



private void button35_Click(object sender, EventArgs e)

byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x04;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x06; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = 0x01;

if(checkBox1.Checked )

sendbuf[10] = 0x80;
sendbuf[11] = (byte)(comboBox9.SelectedIndex + 2 * comboBox10.SelectedIndex);

else

sendbuf[10] = 0x00;
sendbuf[11] = (byte)(comboBox9.SelectedIndex + 2 * comboBox10.SelectedIndex);



try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length); //将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;



private void button3_Click(object sender, EventArgs e)

byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x05;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x06; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = 0x07;
sendbuf[10] = 0x00;
sendbuf[11] = 0x08;

try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length);//将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;



private void button4_Click(object sender, EventArgs e)

byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x06;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x03; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = (byte)beginbuf.Value ;
sendbuf[10] = 0x00;
sendbuf[11] = (byte)bufnum.Value ;

try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length);//将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;



private void button7_Click(object sender, EventArgs e)

byte wrib1;
byte wrib2;
string wreitstr = textBox1.Text.Trim();

try

wrib1 = Convert.ToByte(Convert.ToInt32(wreitstr.Substring(0, 2), 16));
wrib2 = Convert.ToByte(Convert.ToInt32(wreitstr.Substring(3, 2), 16));

catch (Exception ex)

MessageBox.Show("请在右边栏中输入要写入的16进制数据!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;


byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x07;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x06; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = (byte)beginbuf.Value;
sendbuf[10] = wrib1;
sendbuf[11] = wrib2;

try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length);//将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;



private void button6_Click(object sender, EventArgs e)

byte[] Writbuf = new byte[48];
int WritNum =(int)(bufnum.Value * 2);
int i;

string wreitstr = textBox1.Text.Trim();

try

for (i = 0; i < WritNum;i++ )

Writbuf[i] = Convert.ToByte(Convert.ToInt32(wreitstr.Substring(i*3, 2), 16));


catch (Exception ex)

MessageBox.Show("请在右边栏中输入要写入的16进制数据,每个寄存器要写入2个字节数据!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;


byte[] sendbuf = new byte[WritNum+13];
sendbuf[0] = 0x55;
sendbuf[1] = 0x08;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x10; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = (byte)beginbuf.Value;
sendbuf[10] = 0x00;
sendbuf[11] = (byte)bufnum.Value;
sendbuf[12] = (byte)WritNum;

for (i = 1; i <= WritNum; i++)

sendbuf[12 + i] = Writbuf[i - 1];


try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length);//将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (i = 0; i <= 12 + WritNum; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;



private void button5_Click(object sender, EventArgs e)

byte[] sendbuf = new byte[12];
sendbuf[0] = 0x55;
sendbuf[1] = 0x09;
sendbuf[2] = 0x00; //MODBUS TCP协议标识
sendbuf[3] = 0x00;
sendbuf[4] = 0x00;
sendbuf[5] = 0x06; //指令长度
sendbuf[6] = 0x00;
sendbuf[7] = 0x06; //功能码
sendbuf[8] = 0x00;
sendbuf[9] = 0x07;
sendbuf[10] = 0x00;
sendbuf[11] = 0x04;

try

NetworkStream stream;
stream = tcpClient.GetStream(); //获取网络流
lock (stream) ; //为了保证数据的完整性以及安全性 锁定数据流
stream.Write(sendbuf, 0, sendbuf.Length);//将数据写入网络流
string recestr = "";
recestr = "SendTo:" + (ipaddress + ":" + remortprot.ToString().Trim() + " ").Substring(0, 22) + "电脑发送:";
for (int i = 0; i < 12; i++)

recestr = recestr + sendbuf[i].ToString("X2") + " ";

f1.listBox1.Items.Add(recestr);
f1.listBox1.SelectedIndex = f1.listBox1.Items.Count - 1;

catch

connok = false;
tcpClient.Close();
button1.Text = "建立与读写器的TCP连接";
panel1.Enabled = false;




以上是关于C# TCP通讯客户端源码的主要内容,如果未能解决你的问题,请参考以下文章

Qt TCP/UDP 网络协议入门实操TCP通讯

TCP/IP协议学习 基于C# Socket的Web服务器---动态通讯实现

Qt TCP/UDP 网络协议入门实操TCP通讯

Qt TCP/UDP 网络协议入门实操TCP通讯

C#里实现简单的异步TCP服务器

C#里实现简单的异步TCP服务器