当前位置: 首页 > news >正文

天门市网站建设_网站建设公司_原型设计_seo优化

phpcms 安装官网的教程更换域名后网站图片还是无法显示,wordpress导出xml,计算机速成班培训,郑州网站建设公司谷雨我们在讲解Socket编程前#xff0c;先看几个和Socket编程紧密相关的概念#xff1a; TCP/IP层次模型当然这里我们只讨论重要的四层 01#xff0c;应用层(Application)#xff1a;应用层是个很广泛的概念#xff0c;有一些基本相同的系统级TCP/IP应用以及应用协议#xff…我们在讲解Socket编程前先看几个和Socket编程紧密相关的概念 TCP/IP层次模型    当然这里我们只讨论重要的四层        01应用层(Application)应用层是个很广泛的概念有一些基本相同的系统级TCP/IP应用以及应用协议也有许多的企业应用和互联网应用。http协议在应用层运行。        02传输层(Tanspot)传输层包括UDP和TCPUDP几乎不对报文进行检查而TCP 提供传输保证。       03网络层(Netwok):网络层协议由一系列协议组成包括ICMP、IGMP、RIP、OSPF、IP(v4,v6)等。       04链路层(Link):又称为物理数据网络接口层负责报文传输。    然后我们来看下tcp层次模型图        从上图中可以看出应用程序在应用层运行在传输层在数据前加上了TCP头在 网络层加上的IP头在数据链路层加上了帧。    2端口     端口号范围:0-65535总共能表示65536个数。    按端口号可分为3大类   1公认端口WellKnownPorts从0到1023它们紧密绑定binding于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如80端口实际上总是HTTP通讯。   2注册端口RegisteredPorts从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口这些端口同样用于许多其它目的。例如许多系统处理动态端口从1024左右开始。   3动态和/或私有端口Dynamicand/orPrivatePorts从49152到65535。理论上不应为服务分配这些端口。实际上机器通常从1024起分配动态端口。 3.TCP和UDP报文   下面一起来看下TCP和UDP的报文图         从图中我们可以看出TCP和UDP中都有校验和但是在UDP报文中一般不使用校验和这样可以加快数据传输的速度但是数据的准确性可能会受到影响。换句话说Tcp协议都有校验和为了保证传输数据的准确性。 3.Socket      Socket包括Ip地址和端口号两部分程序通过Socket来通信Socket相当于操作系统的一个组件。Socket作为进程之间通信机制通常也称作”套接字”用于描述IP地址和端口号是一个通信链的句柄。说白了就是两个程序通信用的。 生活案例对比       Socket之间的通信可以类比生活中打电话的案例。任何用户在通话之前首先要占有一部电话机相当于申请一个Socket同时要知道对方的号码相当于对方有一个固定的Socket然后向对方拨号呼叫相当于发出连接请求。假如对方在场并空闲拿起 电话话筒双方就可以进行通话了。双方的通话过程是一方向电话机发出信号和对方从电话机接收信号的过程相当于向socket发送数据和从socket接收数据。通话结束后一方挂起电话机相当于关闭socket撤销连接。      注意Socket不仅可以在两台电脑之间通信还可以在同一台电脑上的两个程序间通信。 4端口进阶(深入)     通过IP地址确定了网络中的一台电脑后该电脑上可能提供很多提供服务的应用每一个应用都对应一个端口。 在Internet上有很多这样的主机这些主机一般运行了多个服务软件 同时提供几种服务每种服务都打开一个Socket并绑定到一个端口上不同的端口对应于不同的服务(应用程序)     例如http 使用80端口   ftp使用21端口     smtp使用25端口 5.Socket分类      Socket主要有两种类型 流式Socket          是一种面向连接的Socket针对于面向连接的TCP服务应用安全但是效率低      2数据报式Socket           是一种无连接的Socket对应于无连接的UDP服务应用不安全但效率高  6. Socket一般应用模式(服务器端和客户端)      服务器端的Socket(至少需要两个)         01.一个负责接收客户端连接请求(但不负责与客户端通信)        02.每成功接收到客户端的连接便在服务器端产生一个对应的复杂通信的Socket           021.在接收到客户端连接时创建          022. 为每个连接成功的客户端请求在服务器端都创建一个对应的Socket(负责和客户端通信)     客户端的Socket 必须指定要连接的服务器地址和端口通过创建一个Socket对象来初始化一个到服务器端的TCP连接        通过上图我们可以看出首先服务器会创建一个负责监听的socket然后客户端通过socket连接到服务器指定端口最后服务器端负责监听的socket监听到客户端有连接过来了就创建一个负责和客户端通信的socket。 下面我们来看下Socket更具体的通信过程 Socket的通讯过程   服务器端     01申请一个socket     02绑定到一个IP地址和一个端口上     03开启侦听等待接收连接   客户端     01申请一个socket    02连接服务器(指明IP地址和端口号)    服务器端接收到连接请求后产生一个新的socket(端口大于1024)与客户端建立连接并进行通信原监听socket继续监听。   注意负责通信的Socket不能无限创建创建的数量和操作系统有关。  7.Socket的构造函数     Public Socket(AddressFamily addressFamily,SocketType  socketType,ProtocolType  protocolTYpe)     AddressFamily指定Socket用来解析地址的寻址方案。例如InterNetWork指示当Socket使用一个IP版本4地址连接    SocketType定义要打开的Socket的类型    Socket类使用ProtocolType枚举向Windows  Sockets  API通知所请求的协议 注意    1端口号必须在 1 和 65535之间最好在1024以后。    2要连接的远程主机必须正在监听指定端口也就是说你无法随意连接远程主机。 如 IPAddress addr IPAddress.Parse(127.0.0.1); IPEndPoint endp new IPEndPoint(addr,,9000);          服务端先绑定serverWelcomeSocket.Bind(endp)          客户端再连接clientSocket.Connect(endp)    3,一个Socket一次只能连接一台主机    4,Socket关闭后无法再次使用   5,每个Socket对象只能与一台远程主机连接。如果你想连接到多台远程主机你必须创建多个Socket对象。 8.Socket常用类和方法   相关类    IPAddress包含了一个IP地址    IPEndPoint包含了一对IP地址和端口号  方法    Socket():创建一个Socket    Bind():绑定一个本地的IP和端口号IPEndPoint    Listen():让Socket侦听传入的连接吃那个病并指定侦听队列容量    Connect():初始化与另一个Socket的连接    Accept接收连接并返回一个新的Socket    Send输出数据到Socket    Receive():从Socket中读取数据    Close():关闭Socket销毁连接   接下来我们同一个简单的服务器和客户端通信的案例来看下Sokcet的具体用法效果图如下   关键代码 服务器端代码 1 private void Form1_Load(object sender, EventArgs e)2 3 {4 5 Control.CheckForIllegalCrossThreadCalls false;6 7 }8 9 10 11 private void btnListen_Click(object sender, EventArgs e)12 13 {14 15 //ip地址16 17 IPAddress ip IPAddress.Parse(txtIP.Text);18 19 // IPAddress ip IPAddress.Any;20 21 //端口号22 23 IPEndPoint pointnew IPEndPoint(ip,int.Parse(txtPort.Text));24 25 //创建监听用的Socket26 27 /*28 29 * AddressFamily.InterNetWork使用 IP4地址。30 31 SocketType.Stream支持可靠、双向、基于连接的字节流而不重复数据。此类型的 Socket 与单个对方主机进行通信并且在通信开始之前需要远程主机连接。Stream 使用传输控制协议 (Tcp) ProtocolType 和 InterNetworkAddressFamily。32 33 ProtocolType.Tcp使用传输控制协议。34 35 */36 37 //使用IPv4地址流式socket方式tcp协议传递数据38 39 Socket socketnew Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);40 41 //创建好socket后必须告诉socket绑定的IP地址和端口号。42 43 //让socket监听point44 45 try46 47 {48 49 //socket监听哪个端口50 51 socket.Bind(point);52 53 //同一个时间点过来10个客户端排队54 55 socket.Listen(10);56 57 ShowMsg(服务器开始监听);58 59 Thread thread new Thread(AcceptInfo);60 61 thread.IsBackground true;62 63 thread.Start(socket);64 65 }66 67 catch (Exception ex)68 69 {70 71 72 73 ShowMsg(ex.Message);74 75 }76 77 }78 79 //记录通信用的Socket80 81 Dictionarystring,Socket dicnew Dictionarystring, Socket();82 83 // private Socket client;84 85 void AcceptInfo(object o)86 87 {88 89 Socket socket o as Socket;90 91 while (true)92 93 {94 95 //通信用socket96 97 try98 99 { 100 101 //创建通信用的Socket 102 103 Socket tSocket socket.Accept(); 104 105 string point tSocket.RemoteEndPoint.ToString(); 106 107 //IPEndPoint endPoint (IPEndPoint)client.RemoteEndPoint; 108 109 //string me Dns.GetHostName();//得到本机名称 110 111 //MessageBox.Show(me); 112 113 ShowMsg(point 连接成功); 114 115 cboIpPort.Items.Add(point); 116 117 dic.Add(point, tSocket); 118 119 //接收消息 120 121 Thread th new Thread(ReceiveMsg); 122 123 th.IsBackground true; 124 125 th.Start(tSocket); 126 127 } 128 129 catch (Exception ex) 130 131 { 132 133 ShowMsg(ex.Message); 134 135 break; 136 137 } 138 139 } 140 141 } 142 143 //接收消息 144 145 void ReceiveMsg(object o) 146 147 { 148 149 Socket client o as Socket; 150 151 while (true) 152 153 { 154 155 //接收客户端发送过来的数据 156 157 try 158 159 { 160 161 //定义byte数组存放从客户端接收过来的数据 162 163 byte[] buffer new byte[1024 * 1024]; 164 165 //将接收过来的数据放到buffer中并返回实际接受数据的长度 166 167 int n client.Receive(buffer); 168 169 //将字节转换成字符串 170 171 string words Encoding.UTF8.GetString(buffer, 0, n); 172 173 174 175 ShowMsg(client.RemoteEndPoint.ToString() : words); 176 177 } 178 179 catch (Exception ex) 180 181 { 182 183 ShowMsg(ex.Message); 184 185 break; 186 187 } 188 189 } 190 191 } 192 193 194 195 void ShowMsg(string msg) 196 197 { 198 199 txtLog.AppendText(msg\r\n); 200 201 } 202 203 204 205 private void Form1_FormClosing(object sender, FormClosingEventArgs e) 206 207 { 208 209 //主窗体关闭时关闭子线程 210 211 212 213 } 214 215 //给客户端发送消息 216 217 private void btnSend_Click(object sender, EventArgs e) 218 219 { 220 221 try 222 223 { 224 225 ShowMsg(txtMsg.Text); 226 227 string ip cboIpPort.Text; 228 229 byte[] buffer Encoding.UTF8.GetBytes(txtMsg.Text); 230 231 dic[ip].Send(buffer); 232 233 // client.Send(buffer); 234 235 } 236 237 catch (Exception ex) 238 239 { 240 241 ShowMsg(ex.Message); 242 243 } 244 245 246 247 }   客户端代码 1 Socket client new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);2 3 private void btnConnection_Click(object sender, EventArgs e)4 5 {6 7 //连接到的目标IP8 9 IPAddress ip IPAddress.Parse(txtIP.Text);10 11 //IPAddress ip IPAddress.Any;12 13 //连接到目标IP的哪个应用(端口号)14 15 IPEndPoint pointnew IPEndPoint(ip,int.Parse(txtPort.Text));16 17 try18 19 {20 21 //连接到服务器22 23 client.Connect(point);24 25 ShowMsg(连接成功);26 27 ShowMsg(服务器 client.RemoteEndPoint.ToString());28 29 ShowMsg(客户端: client.LocalEndPoint.ToString());30 31 //连接成功后就可以接收服务器发送的信息了32 33 Thread thnew Thread(ReceiveMsg);34 35 th.IsBackground true;36 37 th.Start();38 39 }40 41 catch (Exception ex)42 43 {44 45 ShowMsg(ex.Message);46 47 }48 49 }50 51 //接收服务器的消息52 53 void ReceiveMsg()54 55 {56 57 while (true)58 59 {60 61 try62 63 {64 65 byte[] buffer new byte[1024 * 1024];66 67 int n client.Receive(buffer);68 69 string s Encoding.UTF8.GetString(buffer, 0, n);70 71 ShowMsg(client.RemoteEndPoint.ToString() : s);72 73 }74 75 catch (Exception ex)76 77 {78 79 ShowMsg(ex.Message);80 81 break;82 83 }84 85 }86 87 88 89 }90 91 92 93 void ShowMsg(string msg)94 95 {96 97 txtInfo.AppendText(msg\r\n);98 99 } 100 101 102 103 private void btnSend_Click(object sender, EventArgs e) 104 105 { 106 107 //客户端给服务器发消息 108 109 if (client!null) 110 111 { 112 113 try 114 115 { 116 117 ShowMsg(txtMsg.Text); 118 119 byte[] buffer Encoding.UTF8.GetBytes(txtMsg.Text); 120 121 client.Send(buffer); 122 123 } 124 125 catch (Exception ex) 126 127 { 128 129 ShowMsg(ex.Message); 130 131 } 132 133 } 134 135 136 137 } 138 139 140 141 private void ClientForm_Load(object sender, EventArgs e) 142 143 { 144 145 Control.CheckForIllegalCrossThreadCalls false; 146 147 } 转载于:https://www.cnblogs.com/asdyzh/p/9839775.html
http://www.ihoyoo.com/news/1020.html

相关文章:

  • 个人网站设计模板上海天华建筑设计有限公司代表作
  • wordpress回收站在哪wordpress皮肤
  • 在线做试卷的网站重庆网站seo排名
  • 网上家教网站开发阿里云建设网站
  • 在网站上发消息做宣传装修在线设计平台
  • 用.net core 做网站网络营销包括哪些基本内容
  • 自己买服务器可以搭建网站吗福州制作网站软件
  • 百度免费网站空间备案 网站名称 怎么改
  • 江西工程建设信息网站网站持有者和备案企业
  • 北京网站制作公司公司湖南专业seo推广
  • 以什么主题做网站好网站制作编辑软件
  • angular wordpressseo搜索优化公司报价
  • 建网站的公司南京学习网站建设的心得体会
  • 太平洋在线企业网站管理系统南阳做网站
  • 怎么做卖花的网站西安市建设工程信息网平台官网
  • 比较有名的diy制作网站什么是网络营销网络营销的内容有哪些
  • 什邡移动网站建设网站备案取消接入
  • 获得网站后台地址深圳蕾奥规划设计公司网站
  • 网站建设与管理插图电商网站设计原则
  • 米思米网站订单取消怎么做网站建设案例如何
  • 国外红色企业网站如何设定旅游网站seo核心关键词
  • 泉州网站建设方案服务合川网站优化
  • 免费自助设计网站阿里云服务器
  • 做网站的公司地址wordpress 分类目录 高亮
  • 设计网站中如何设置特效angular2.0网站制作
  • 网站空间支付方式购物商城网站的制作
  • 安微省城城乡建设厅网站创建全国文明城市主题班会教案
  • 购买手表的网站按营销型网站要求重做网站 费用
  • 鞍山网站开发页面模板够30条
  • wordpress小程序小论坛安徽优化网站