您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 数媒-梁伟伦-1400170151-实验5
贵州大学实验报告学院:计算机科学与技术学院专业:数字媒体技术班级:141姓名梁伟伦学号1400170151实验组实验时间2017.04.19指导教师蔡丽成绩实验项目名称实验五TCP同步编程实验目的通过本实验掌握C#中TCP同步编程的方法,了解其区别与适用场合。实验要求熟悉VisualStudio开发环境,掌握C#的TCP同步编程。实验环境VisualStudio开发环境实验步骤1.设计程序界面。2.实现程序功能。实验内容实现简单的基于同步TCP的通信程序,要求使用C#的TCP同步方法。实验数据实验代码:publicfrmSyncTcpServer(){InitializeComponent();//显示消息shwMsgforViewCallBack=newShwMsgforViewCallBack(ShwMsgforView);//显示状态shwStatusInfoCallBack=newShwStatusInfoCallBack(ShwStatusInfo);//显示进度shwProgressProcCallBack=newShwProgressProcCallBack(ShwProgressProc);//重置消息文本resetMsgTxtCallBack=newResetMsgTxtCallBack(ResetMsgTxt);IPAddress[]listenIp=Dns.GetHostAddresses();localAddress=listenIp[0];tbxSendCount.Text=sendCount.ToString();tbxReceiveCount.Text=receiveCount.ToString();toolStripProgressProc.Minimum=0;}privatevoidAcceptClientConnect(){statusStripInfo.Invoke(shwStatusInfoCallBack,[+localAddress+:+port+]侦听...);//间歇延时DateTimenowtime=DateTime.Now;while(nowtime.AddSeconds(1)DateTime.Now){}try{statusStripInfo.Invoke(shwStatusInfoCallBack,等待连接...);statusStripInfo.Invoke(shwProgressProcCallBack,1);tcpClient=tcpListener.AcceptTcpClient();//同步操作1//附加操作1statusStripInfo.Invoke(shwProgressProcCallBack,100);if(tcpClient!=null){statusStripInfo.Invoke(shwStatusInfoCallBack,接受了一个连接.);networkStream=tcpClient.GetStream();br=newBinaryReader(networkStream);bw=newBinaryWriter(networkStream);}}catch{statusStripInfo.Invoke(shwStatusInfoCallBack,停止侦听.);//间歇延时DateTimenow=DateTime.Now;while(now.AddSeconds(1)DateTime.Now){}statusStripInfo.Invoke(shwProgressProcCallBack,0);statusStripInfo.Invoke(shwStatusInfoCallBack,就绪);}}C#SyncTcpClient核心代码:privateTcpClienttcpClient;privateNetworkStreamnetworkStream;privateBinaryReaderbr;privateBinaryWriterbw;privateintsendCount=1;privateintreceiveCount=10;//显示消息privatedelegatevoidShwMsgforViewCallBack(stringstr);privateShwMsgforViewCallBackshwMsgforViewCallBack;//显示状态privatedelegatevoidShwStatusInfoCallBack(stringstr);privateShwStatusInfoCallBackshwStatusInfoCallBack;//显示进度privatedelegatevoidShwProgressProcCallBack(intprogress);privateShwProgressProcCallBackshwProgressProcCallBack;//重置消息文本privatedelegatevoidResetMsgTxtCallBack();privateResetMsgTxtCallBackresetMsgTxtCallBack;publicfrmSyncTcpClient(){InitializeComponent();/*定义委托*///显示消息shwMsgforViewCallBack=newShwMsgforViewCallBack(ShwMsgforView);//显示状态shwStatusInfoCallBack=newShwStatusInfoCallBack(ShwStatusInfo);//显示进度shwProgressProcCallBack=newShwProgressProcCallBack(ShwProgressProc);//重置消息文本resetMsgTxtCallBack=newResetMsgTxtCallBack(ResetMsgTxt);/*定义委托*/IPAddress[]serverIp=Dns.GetHostAddresses();tbxSrvIp.Text=serverIp[0].ToString();tbxSrvIp.SelectAll();tbxPort.Text=51888;tbxSendCount.Text=sendCount.ToString();tbxReceiveCount.Text=receiveCount.ToString();toolStripProgressProc.Minimum=0;}/*定义回调函数*///显示消息privatevoidShwMsgforView(stringstr){lstbxMsgView.Items.Add(str);lstbxMsgView.TopIndex=lstbxMsgView.Items.Count-1;}//显示状态privatevoidShwStatusInfo(stringstr){toolStripStatusInfo.Text=str;}//显示进度privatevoidShwProgressProc(intprogress){toolStripProgressProc.Value=progress;}//重置消息文本privatevoidResetMsgTxt(){tbxMsg.Text=;tbxMsg.Focus();}/*定义回调函数*/privatevoidbtnConnect_Click(objectsender,EventArgse){toolStripProgressProc.Maximum=100;toolStripProgressProc.Value=0;//通过一个线程发起请求ThreadthreadConnect=newThread(ConnectoServer);threadConnect.Start();}//发起连接请求privatevoidConnectoServer(){try{statusStripInfo.Invoke(shwStatusInfoCallBack,正在连接...);IPHostEntryremoteHost=Dns.GetHostEntry(tbxSrvIp.Text);tcpClient=newTcpClient();statusStripInfo.Invoke(shwProgressProcCallBack,1);tcpClient.Connect(remoteHost.HostName,int.Parse(tbxPort.Text));//非同步//非同步操作statusStripInfo.Invoke(shwProgressProcCallBack,100);//间歇延时DateTimenowtime=DateTime.Now;while(nowtime.AddSeconds(1)DateTime.Now){}if(tcpClient!=null){statusStripInfo.Invoke(shwStatusInfoCallBack,连接成功!);networkStream=tcpClient.GetStream();br=newBinaryReader(networkStream);bw=newBinaryWriter(networkStream);}}catch{statusStripInfo.Invoke(shwStatusInfoCallBack,连接失败!);//间歇延时DateTimenow=DateTime.Now;while(now.AddSeconds(1)DateTime.Now){}statusStripInfo.Invoke(shwProgressProcCallBack,0);statusStripInfo.Invoke(shwStatusInfoCallBack,就绪);}}privatevoidbtnReceive_Click(objectsender,EventArgse){receiveCount=int.Parse(tbxReceiveCount.Text);toolStripProgressProc.Maximum=receiveCount;toolStripProgressProc.Value=0;ThreadthreadReceive=newThread(ReceiveMessage);threadReceive.Start();}//接收消息privatevoidReceiveMessage(){statusStripInfo.Invoke(shwStatusInfoCallBack,接收中...);for(inti=0;ireceiveCount;i++){try{stringrcvMsgStr=br.ReadString();//同步操作1//附加操作1statusStripInfo.Invoke(shwProgressProcCallBack,i+1);if(rcvMsgStr!=null){lstbxMsgView.Invoke(shwMsgforViewCallBack,rcvMsgStr);}}catch{if(br!=null){br.Close();}if(bw!=null){bw.Close();}if(tcpClient!=null){tcpClient.Close();}statusStripInfo.Invoke(shwStatusInfoCallBack,连接断开!);statusStripInfo.Invoke(shwProgressProcCallBack,0);break;}}statusStripInfo.Invoke(shwStatusInfoCallBack,接收了+receiveCount+条消息.);}privatevoidbtnSend_Click(objectsender,EventArgse){sendCou
本文标题:数媒-梁伟伦-1400170151-实验5
链接地址:https://www.777doc.com/doc-4638741 .html