C#学习笔记——TCP通讯
2013-02-19 12:46
363 查看
服务端:TcpListener
客户端:TcpClient、NetworkStream
(要熟悉的类,请参照MSDN。)
TCP客户端:
界面:
代码:
TCP服务端:
界面:
代码:
客户端: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);
}
}
}
相关文章推荐
- c#网络编程学习笔记02_Tcp编程(中)_简单的同步tcp聊天程序
- SOCKET学习笔记1——TCP通讯
- socket通讯学习笔记(c#)
- [学习笔记]Java网络编程之TCP通讯
- QT笔记(1)——TCP通讯学习
- WCF 学习笔记(三)----构建双向通讯(tcp/http)
- [学习笔记]Java网络编程之TCP通讯
- c#网络编程学习笔记02_Tcp编程(上)
- C#学习笔记-socket通信(同步,客户端+服务器,TCP)
- Redis 学习笔记七 C#使用redis 处理过程
- C#学习笔记:RadioButton控件与CheckBox控件的用法
- C#学习笔记(七):接口的执行
- C# Socket SSL通讯笔记
- Programming C# 学习笔记(三) C#语言基础
- C#学习笔记(八):集合
- (转)C#学习笔记之程序集
- 【C#学习笔记】网页弹出提示框
- 笔记: C#文件操作方法学习
- C#/WPF学习笔记:class 与 struct
- C#学习笔记集合类型之Hashtable、Dictionary和SortedList(2)