您的位置:首页 > 理论基础 > 计算机网络

C#学习笔记——TCP通讯

2013-02-19 12:46 363 查看
服务端:TcpListener

客户端:TcpClient、NetworkStream

(要熟悉的类,请参照MSDN。)

TCP客户端:

界面:





代码:



usingSystem;


usingSystem.Collections.Generic;


usingSystem.ComponentModel;


usingSystem.Data;


usingSystem.Drawing;


usingSystem.Text;


usingSystem.Windows.Forms;


//引入命名空间


usingSystem.Net;


usingSystem.Net.Sockets;


usingSystem.Threading;




namespaceCSharp_003_同步TCP客户端


{


publicpartialclassfrmMain:Form


{


//定义回调//定义委托


privatedelegatevoidShowReceiveMsgCallBack(stringtext);


//声明回调//声明委托


privateShowReceiveMsgCallBackshowReceiveMsgCallBack;


//定义回调


privatedelegatevoidSetProgressBarValueCallBack();


//声明回调


privateSetProgressBarValueCallBacksetProgressBarValueCallBack;




privateTcpClientmyTcpClient;//声明TCP客户端


privateNetworkStreamnetStream;//声明网络数据流


privateThreadreceiveDataThread;//声明接收数据进程






publicfrmMain()


{


InitializeComponent();


}




privatevoidfrmMain_Load(objectsender,EventArgse)


{


//初始化回调//实例化委托


showReceiveMsgCallBack=newShowReceiveMsgCallBack(AddMsgToList);


//初始化回调


setProgressBarValueCallBack=newSetProgressBarValueCallBack(SetProgressBarValue);


}




privatevoidbtnConnect_Click(objectsender,EventArgse)


{


//创建并实例化IP终结点


IPEndPointiPEndPoint=newIPEndPoint(IPAddress.Parse(txtServerIp.Text),Convert.ToInt32(txtServerPort.Text));


//实例化TCP客户端


myTcpClient=newTcpClient();


try


{


//发起TCP连接


myTcpClient.Connect(iPEndPoint);


//获取绑定的网络数据流


netStream=myTcpClient.GetStream();


//实例化接收数据进程


receiveDataThread=newThread(ReceiveMsg);


receiveDataThread.Start();


}


catch(System.Exceptionex)


{


MessageBox.Show(ex.Message);


}




}




//接收消息线程


privatevoidReceiveMsg()


{


MessageBox.Show("客户端已连接服务器!");




while(true)


{


try


{


//获取数据


byte[]getData=newbyte[1024];


netStream.Read(getData,0,getData.Length);


//转换为字符串形式


stringstrMsg=Encoding.Default.GetString(getData);


//将接收的消息添加到列表中//调用回调


lstReceiveMsg.Invoke(showReceiveMsgCallBack,strMsg);


//改变进度条


pgMsg.Invoke(setProgressBarValueCallBack);


}


catch(ThreadAbortException)


{




}


catch(System.Exceptionex)


{


MessageBox.Show(ex.Message);


//释放相关资源


if(netStream!=null)


{


netStream.Dispose();


}


break;


}


}


}




//回调函数的实现函数//被委托的函数


privatevoidAddMsgToList(stringtext)


{


lstReceiveMsg.Items.Add(text);


}




//回调函数的实现函数


privatevoidSetProgressBarValue()


{


if(pgMsg.Maximum==pgMsg.Value)


{


pgMsg.Value=1;


}


else


{


pgMsg.Value++;


}


}




privatevoidbtnSendMsg_Click(objectsender,EventArgse)


{


byte[]sendData;


sendData=Encoding.Default.GetBytes(txtMsg.Text);


netStream.Write(sendData,0,sendData.Length);


}




privatevoidbtnDisConnect_Click(objectsender,EventArgse)


{


//销毁TCP客户端和网络数据流的实例


myTcpClient.Close();


netStream.Dispose();


receiveDataThread.Abort();


}






}


}


TCP服务端:

界面:





代码:

usingSystem;


usingSystem.Collections.Generic;


usingSystem.ComponentModel;


usingSystem.Data;


usingSystem.Drawing;


usingSystem.Text;


usingSystem.Windows.Forms;


usingSystem.Net;


usingSystem.Net.Sockets;


usingSystem.Threading;




namespaceCSharp_003服务端


{


publicpartialclassfrmMain:Form


{


//定义回调//定义委托


privatedelegatevoidShowReceiveMsgCallBack(stringtext);


//声明回调//声明委托


privateShowReceiveMsgCallBackshowReceiveMsgCallBack;




privateTcpListenerserver;//声明Tcp监听对象


privateThreadtcpListenerThread;//声明Tcp监听线程


privateInt32port;//端口号


privateIPAddresslocalAddr;//本地IP地址


privateThreadreceiveDataThread;//声明接收数据的线程




publicfrmMain()


{


InitializeComponent();


}




privatevoidbtnListen_Click(objectsender,EventArgse)


{


stringstrPort=txtServerPort.Text;


if(strPort=="")


{


MessageBox.Show("请输入监听端口");


return;


}


try


{


//设置监听的端口


port=Int32.Parse(strPort);


localAddr=IPAddress.Parse("127.0.0.1");


if(port>0)


{


//启动服务端监听线程


tcpListenerThread=newThread(StartListenerTcp);


tcpListenerThread.Start();


}


else


MessageBox.Show("监听端口号必须大于0,建议使用大于1024的端口");


}


catch(System.Exceptionex)


{




}


}




//Tcp监听线程的实现函数


privatevoidStartListenerTcp()


{


server=newTcpListener(localAddr,port);


server.Start();//开始监听客户端的申请


MessageBox.Show("服务已启动。。。");






try


{


//启动接收数据的线程


receiveDataThread=newThread(ReceiveMsg);


receiveDataThread.Start();


}


catch(Exceptione)


{


MessageBox.Show(e.ToString());


receiveDataThread.Abort();


}




}




//接收消息线程的实现函数


privatevoidReceiveMsg()


{


TcpClientclient=server.AcceptTcpClient();


NetworkStreamnetStream=client.GetStream();


while(true)


{


try


{


netStream=client.GetStream();


//获取数据


byte[]getData=newbyte[1024];


netStream.Read(getData,0,getData.Length);


//转换为字符串形式


stringstrMsg=Encoding.Default.GetString(getData);


//将接收的消息添加到列表中//调用回调


lstReceiveMsg.Invoke(showReceiveMsgCallBack,strMsg);


//将数据返回


netStream.Write(getData,0,getData.Length);


}


catch(ThreadAbortException)


{




}


catch(System.Exceptionex)


{


MessageBox.Show(ex.Message);


//释放相关资源


if(netStream!=null)


{


netStream.Dispose();


}


break;


}


}


}








//回调函数的实现函数//被委托的函数


privatevoidAddMsgToList(stringtext)


{


lstReceiveMsg.Items.Add(text);


}




privatevoidfrmMain_Load(objectsender,EventArgse)


{


//初始化回调//实例化委托


showReceiveMsgCallBack=newShowReceiveMsgCallBack(AddMsgToList);


}


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: