版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、河南科技大学计算机网络A实验报告信息工程学院物联网183实验五Socket消息传输程序的实现一、实验目的1、学习掌握高级语言Socket编程的方法。2、掌握TCP/IP协议,了解套接字等概念。3、针对具体的应用要求(实时传输数据/文件/图像/聊天室),编程实现。二、实验原理1、网络编程的基本模型就是客户机到服务器模型,简单的说就是两个进程 之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道 这个固定的位置。并去建立两者之间的联系,然后完成数据的通讯就可以了,这 里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端,基于这个简 单的模型,就可以进入网络编程。2、客户机/
2、服务器模型是一个应用程序开发框架,该框架是为了将数据的表 示与其内部的处理和存储分离开来而设计的。客户机请求服务,服务器为这些请 求服务。请求通过网络从客户机传递到服务器。服务器所进行的处理对客户机而 言是隐藏的。一个服务器可以为客户机服务。3、一个服务器可以同时和多台客户机进行通讯。三、实验条件软件环境:windows操作系统,VC+ 6.0编程软件。硬件环境:1台计算机。四、实验学时2学时五、实验时间第十四周周二19:00-21:00六、实验地点工科2软件一机房和软件二机房七、实验内容与完成情况实验内容(1)掌握TCP原理。(2)用套接字(Socket)编程实现网络文字传输。完成情况usi
3、ng System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace jiwangpublic partial cl
4、ass Form1 : Formpublic Form1 ()InitializeComponent();Thread threadWatch = null;Socket socketWatch = null;private void Form1_Load(object sender, EventArgs e)private void textBox1_TextChanged(object sender, EventArgs e) private void btnServerConn_Click(object sender, EventArgs e) trysocketWatch = new
5、Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp)IPAddress ipaddress = IPAddress.Parse(this.txtIP.Text.Trim();IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(this.txtPort.Text.Trim();socketWatch.Bind(endpoint);socketWatch.Listen(20);threadWatch = new Thread(WatchConnec
6、ting) threadWatch.IsBackground = true; threadWatch.Start();txtMsg.AppendText(开始监听客户端传来的信息! + rn); this.btnServerConn.Enabled = false;catch (Exception ex)txtMsg.AppendText( 服务端启动服务失败! + rn); this.btnServerConn.Enabled = true;Socket socConnection = null;/ /监听客户端发来的请求/ private void WatchConnecting()whi
7、le (true)socConnection = socketWatch.Accept();txtMsg.AppendText(客户端连接成功! + rn);ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);Thread thr = new Thread(pts);thr.IsBackground = true;thr.Start(socConnection);/ /发送信息到客户端的方法/ / 发送的字符串信息private void ServerSendMsg(string sendMsg)t
8、rybyte arrSendMsg = Encoding.UTF8.GetBytes(sendMsg);socConnection.Send(arrSendMsg);txtMsg.AppendText( 服务器+ GetCurrentTime() + rn + sendMsg+ rn);catch (Exception ex)txtMsg.AppendText(客户端已断开连接,无法发送信息! + rn);/ /接收客户端发来的信息/ / 客户端套接字对象private void ServerRecMsg(object socketClientPara)Socket socketServer
9、= socketClientPara as Socket;while (true)byte arrServerRecMsg = new byte1024 * 1024;tryint length = socketServer.Receive(arrServerRecMsg);string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg,0, length);txtMsg.AppendText (天涯+ GetCurrentTime() + rn +strSRecMsg + rn);catch (Exception ex)txtMsg.A
10、ppendText(客户端已断开连接! + rn); break;/ /发送消息到客户端/ / / private void btnSendMsg_Click(object sender, EventArgs e)ServerSendMsg(this.txtSendMsg.Text.Trim();this.txtSendMsg.Clear();/ /快捷键Enter发送信息/ / / private void txtSendMsg_KeyDown(object sender, KeyEventArgs e)if (e.KeyCode = Keys.Enter)ServerSendMsg(txt
11、SendMsg.Text.Trim();this.txtSendMsg.Clear();/ /获取当前系统时间的方法/ / 当前时间private DateTime GetCurrentTime()DateTime currentTime = new DateTime();currentTime = DateTime.Now;return currentTime;/ /获取本地IPv4地址/ / public IPAddress GetLocalIPv4Address()IPAddress localIpv4 = null;IPAddress IpList = Dns.GetHostAddre
12、sses(Dns.GetHostName();foreach (IPAddress IP in IpList)if (IP.AddressFamily = AddressFamily.InterNetwork)localIpv4 = IP;elsecontinue;return localIpv4;/获取本地IP事件private void btnGetLocalIP_Click(object sender, EventArgs e)IPAddress localIP = GetLocalIPv4Address();this.txtIP.Text = localIP.ToString();us
13、ing using using usingusing using2.客户端代码System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace客户端public partial
14、class Form1 : Formpublic Form1 ()InitializeComponent();private void Form1_Load(object sender, EventArgs e)Socket socketClient = null;Thread threadClient = null;/ /连接服务端事件/ / / private void btnListenServer_Click(object sender, EventArgs e)socketClient = new Socket(AddressFamily.InterNetwork, SocketTy
15、pe.Stream, ProtocolType.Tcp);IPAddress ipaddress = IPAddress.Parse(this.txtIP.Text.Trim();IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(this.txtPort.Text.Trim();trysocketClient.Connect(endpoint);this.txtMsg.AppendText(客户端连接服务端成功! + rn); this.btnListenServer.Enabled = false;threadClient =
16、 new Thread(RecMsg);threadClient.IsBackground = true;threadClient.Start();catch (Exception ex)this.txtMsg.AppendText(远程服务端断开,连接失败! + rn); / /接收服务端发来信息的方法/ private void RecMsg()while (true)trybyte arrRecMsg = new byte1024 * 1024;int length = socketClient.Receive(arrRecMsg);string strRecMsg = Encoding
17、.UTF8.GetString(arrRecMsg, 0, length);txtMsg.AppendText (服务端+ GetCurrentTime() + rn + strRecMsg + rn);catch (Exception ex)this.txtMsg.AppendText(远程服务器已中断连接! + rn); this.btnListenServer.Enabled = true;break;/ /发送字符串信息到服务端的方法/ / 发送的字符串信息private void ClientSendMsg(string sendMsg)trybyte arrClientSendMs
18、g = Encoding.UTF8.GetBytes(sendMsg);socketClient.Send(arrClientSendMsg);txtMsg.AppendText (天涯+ GetCurrentTime() + rn + sendMsg +rn);catch (Exception ex) this.txtMsg.AppendText(远程服务器已中断连接,无法发送消息! +rn);private void btnSendMsg_Click(object sender, EventArgs e)ClientSendMsg(this.txtClientSendMsg.Text.Tr
19、im();this.txtClientSendMsg.Clear();private void txtClientSendMsg_KeyDown(object sender, KeyEventArgs e)if (e.KeyCode = Keys.Enter)ClientSendMsg(this.txtClientSendMsg.Text.Trim();this.txtClientSendMsg.Clear();/ /获取当前系统时间的方法/ / 当前时间private DateTime GetCurrentTime()DateTime currentTime = new DateTime()
20、;currentTime = DateTime.Now;return currentTime;网 C5ock_ChatServerIF停止辟斤退出I八、实验分析及总结实验分析Socket消息传输的工作原理?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组 接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口 就是全部,让Socket去组织数据,以符合指定的协议。Socket消息传输特点是什么?由于通常情况下socket连接就是TCP连接,因此socket连接一 旦建立,通信双方即可开始相
21、互发送数据内容,直到双方连接断开.但在 实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节 点,例如路由器/网关/防火墙等,大部分防火墙默认会关闭长时间处于 非活跃状态的连接,从而导致socket连接断连,因此需要通过轮询告 诉网络,该链接处于活跃状态.然而http连接使用的是请求-响应方式.不仅在请求时需要建立连接, 而且需要客户端向服务器发送请求后,服务器才能回复数据.在很多情况下,需要服务器端主动向客户端推送数据,保持客户端与 服务器数据的实时与同步.此时若双方建立的是socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是http连接,则服务器需 要等到客户端发
22、送一次请求后才能将数据传回给客户端,因此,客户端定 时向服务器端发送连接请求,不仅可以保持在线,同时也是在询问服务 器是否有新的数据,如果有就将数据传给客户端。(3)TCP协议和UDP协议的区别?1)TCP协议面向连接.UDP协议面向非连接(有无链接)2)TCP协议传输速度慢.UDP协议传输速度快(传输速度)3)TCP协议保证数据顺序.UDP协议不保证(数据的有序性.在IP层 时.数据包会变得无序)4)TCP协议保证数据正确性.UDP协议可能丢包(TCP保证数据的可靠 性)5)TCP协议对系统资源要求多.UDP协议要求少(TCP和UDP占用的资 源)实验心得socket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序 通过socket向网络发出请求或者回应。sockets(套
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 红岩课件教学课件
- 教我作文课件教学课件
- 露天作业课件教学课件
- 2024年度玻璃经销合同
- 2024年工程建设项目材料供应协议
- 2024年度生物医药研发与技术合作合同
- 2024年bulk货物运输协议
- 2024年云服务器租赁及托管合同
- 2024幕墙设计合同
- 2024年度虚拟现实技术研发与许可合同
- 浙江省温州市地图矢量PPT模板(图文)
- 上海市建设工程项目管理机构管理人员情况表
- 北师大版二年级数学上册第九单元《除法》知识点梳理复习ppt
- 空气能室外机保养维护记录表
- DB37∕T 5162-2020 装配式混凝土结构钢筋套筒灌浆连接应用技术规程
- 9-2 《第三方过程评估淋蓄水检查内容》(指引)
- 部编版七年级初一语文上册《狼》公开课课件(定稿)
- 2015路面工程讲义(垫层+底基层+基层+面层+联合层+封层、透层与黏层)
- 《现代汉语修辞》PPT课件(完整版)
- TTJCA 0007-2022 住宅室内装饰装修工程施工验收规范
- 构造柱工程施工技术交底
评论
0/150
提交评论