同步TCP客户端
1:声明TcpClient链接
2:声明网络数据流(NetworkStream)
3:实例化IP终结点(IPEndPoint)
4:实例化客户端(TcpClient)
5:发起TCP链接(链接3和4,Connect)
6:获取绑定的数据流(链接2和4,ns = myTcpClient.GetStream();)
7:需要发送的消息传入数据流(ns.Write(sendData,0,sendData.Length);)
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;
namespace _003_同步TCP客户端
{
public partial class frmMain : Form
{
private delegate void ShowReceiveMsgCallBack(string text);
private ShowReceiveMsgCallBack showReceiveMsgCallBack;
private delegate void SetProgressBarCallBack();
private SetProgressBarCallBack setProgressBarCallBack;
private TcpClient myTcpClient;
private NetworkStream ns;//网络数据流
private Thread ReceiveMsgThread;
public frmMain()
{
InitializeComponent();
}
private void label3_Click(object sender, EventArgs e)
{
}
//窗体启动加载事件
private void frmMain_Load(object sender, EventArgs e)
{
showReceiveMsgCallBack = new ShowReceiveMsgCallBack(AddMsgToList);
setProgressBarCallBack = new SetProgressBarCallBack(SetProgressBarValue);
}
//建立连接按钮
private void btnConnect_Click(object sender, EventArgs e)
{
//创建并实例化IP终结点
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(txtServerIP.Text), Convert.ToInt16(txtServerPort.Text));
//实例化TCP客户端
myTcpClient = new TcpClient();
try
{
//发起tcp链接
myTcpClient.Connect(ipEndPoint);
//获取绑定的数据流
ns = myTcpClient.GetStream();
ReceiveMsgThread = new Thread(ReceiveMsg);
ReceiveMsgThread.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//接受消息线程
private void ReceiveMsg()
{
while (true)
{
try
{ //获取数据
byte[] getData=new byte[1024];
ns.Read(getData,0,getData.Length);
//转换为字符串形式
string msg = Encoding.Default.GetString(getData);
//将收到的消息添加到列表回调
IstReceiveMsg.Invoke(showReceiveMsgCallBack,msg);
//修改进度条的值
pgProgressBar.Invoke(setProgressBarCallBack);
}
catch(ThreadAbortException){}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
//释放相关资源
if (ns != null)
{
ns.Dispose();
break;
}
}
}
}
private void AddMsgToList(string text)
{
IstReceiveMsg.Items.Add(text);
}
//修改进度条值得被委托的方法
private void SetProgressBarValue()
{
if (pgProgressBar.Value < pgProgressBar.Maximum)
{ pgProgressBar.Value++; }
else{
pgProgressBar.Value = 0;
}
}
private void btnSendMsg_Click(object sender, EventArgs e)
{
byte[] sendData;
sendData = Encoding.Default.GetBytes(txtSendMsg.Text);
ns.Write(sendData,0,sendData.Length);
}
private void btndisConnect_Click(object sender, EventArgs e)
{
//销毁tcp客户端和网络数据流的事例
myTcpClient.Close();
ns.Dispose();
ReceiveMsgThread.Abort();
}
}
}