using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace _003_同步tcp客户端
{
public partial class Form1 : Form
{
//---定义
private delegate void ShowReceiveMessageCallBack(string text);
//---声明一个委托
private ShowReceiveMessageCallBack showReceiveMessageCallBack;
//----操作进度条委托
private delegate void SetProgressBarValueCallBack();
//----
private SetProgressBarValueCallBack setProgressBarValueCallBack;
private TcpClient myTcpclient; //--tcp 客户端
private NetworkStream networkstream; //---网络数据流
private Thread ReceiveMessageThread; //--接受消息线程
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//---初始化回调
showReceiveMessageCallBack = new ShowReceiveMessageCallBack(AddMessageToList);
// ---初始化
setProgressBarValueCallBack = new SetProgressBarValueCallBack(SetProgreassBarValue);
textbox_serverIP.Text = "127.0.0.1";
textbox_serverPort.Text = "5788";
textbox_sendMessage.Text = "blue, 你好";
}
//---建立连接单击事件
private void btn_connect_Click(object sender, EventArgs e)
{
//--创建实例化IP终结点
//--传入的是服务器IP + 端口
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(textbox_serverIP.Text), Convert.ToInt32(textbox_serverPort.Text));
//--实例化TCP客户端
myTcpclient = new TcpClient();
//--异常 处理
try
{
//--发起TCP连接
myTcpclient.Connect(ipEndPoint);
//--获取网络数据流
networkstream = myTcpclient.GetStream();
//---实例化接收消息线程
ReceiveMessageThread = new Thread(ReceiveMessage);
//--启动线程
ReceiveMessageThread.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//--创建线程--等待服务器消息到来
private void ReceiveMessage()
{
while (true)
{
try
{
byte[] receiveData = new byte[1024]; ///---字节
networkstream.Read(receiveData, 0, receiveData.Length);
//--转换为字符串格式--默认编码为ANSC||
string msg = Encoding.Default.GetString(receiveData);
//---将消息放到消息列表中
listbox_receiveMessage.Invoke(showReceiveMessageCallBack, msg);
//--设置进度条的值的回调函数
progressbar_progressBar.Invoke(setProgressBarValueCallBack);
}
catch(ThreadAbortException)
{
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//--释放相关系统资源---释放TCP连接
if (null != networkstream)
{
networkstream.Dispose();
}
break;
}
}
}
//---添加接受消息到列表的委托的方法
private void AddMessageToList(string text)
{
listbox_receiveMessage.Items.Add(text);
}
//--发送消息
private void btn_sendMessage_Click(object sender, EventArgs e)
{
byte[] sendData;// = new byte[1024];
sendData = Encoding.Default.GetBytes(textbox_sendMessage.Text);
networkstream.Read(sendData, 0, sendData.Length);
}
//---断开连接单击事件
private void btn_disconnect_Click(object sender, EventArgs e)
{
//--销毁TCP客户端和网络数据流即可
myTcpclient.Close();
networkstream.Dispose();
//--终止线程的调用
ReceiveMessageThread.Abort();
}
///--设置进度条的委托的方法
private void SetProgreassBarValue()
{
if (progressbar_progressBar.Value < progressbar_progressBar.Maximum)
{
progressbar_progressBar.Value++;
}
else
{
progressbar_progressBar.Value = 0;
}
}
}
}
代码篇C#网络编程之tcp同步客户端
最新推荐文章于 2019-01-19 20:50:43 发布