网络编程06基于socket的tcp通信_第1页
网络编程06基于socket的tcp通信_第2页
网络编程06基于socket的tcp通信_第3页
网络编程06基于socket的tcp通信_第4页
网络编程06基于socket的tcp通信_第5页
已阅读5页,还剩14页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于SOCKET的通信编程什么是SOCKET所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。

在网络中使用SOCKET进行通信,应该由一个五元组完成:协议

本地IP地址

本地端口号

远程地址

远程端口号TCP/IP基本概念IP地址IP地址是进行TCP/IP协议通信的基础,IP地址是对连接在因特网中的设备进行唯一性标识的设备编码,与日常生活中寄信时所用的信箱号类似,以便设备之间能根据IP地址来识别。在因特网中,根据TCP/IP协议规定,在IPv4中,IP地址由32位二进制数组成,其地址空间是0~232-1。为了便于记忆,将这32位二进制数分成四段,每段8位,中间用小数点隔开,将每八位二进制数转换成一位十进制数,这样就形成了点分十进制的表示方法。例如:81。一个简单的IP地址的格式为:IP地址=网络地址+主机地址,包含了网络地址和主机地址两部分重要的信息。由于IPv4定义的有限地址空间将被耗尽,地址空间的不足必将影响因特网的进一步发展。所以在最新出台的IPv6中IP地址升至128位。IP地址共分五类:A类、B类、C类、D类和E类。其中A类、B类和C类为基本类;D类用于多播传送;E类属于保留类,暂未使用。它们的格式如下所示,其中“*”代表网络号位数。

—55VPNA类地址的最高位必须是“0”,其第一个字节为网络地址,后三个字节为主机地址。因此A类地址可拥有126个网络地址数,其中每个网络最多可以包含的主机数目为224-2(主机地址全1和全0都属于特殊地址),即有16777214台主机。因此,A类地址适用于超大规模的网络。B类地址的最高两位必须是“10”,前两个字节为网络地址,后两个字节为主机地址。B类IP地址中网络地址长度为14位,有16384个网络,其中每个网络最多可以包含的主机数目为216−2,即有65534台主机。因此,B类地址适用于中等规模的网络。

C类地址的最高三位必须是“110”,前三个字节为网络地址,最后一个字节为主机地址。因此,C类地址的网络数目为221,即有2907152个网络,其中每个网络可以包含的主机数目为28−2,即有254台主机。因此,C类地址适用于小规模的局域网络。

D类地址与前三类地址不同,它是一种特殊的IP地址类,应用于多播通信,因此也被称为多播地址。地址前面有4个引导位“1110”,其余的28位表示多播地址,因此其地址范围为:~55。D类地址只能作为目的地址,不能作为源地址。

除上述几类地址外,还有几个特殊的地址。网络地址:IP地址中主机地址为0的地址表示网络地址。这类地址不指派给任何主机,它只保留用来定义某个网络的地址。例如,某主机的IP地址为8,它是一个B类地址,则该主机所在网络的地址为。广播地址:在A、B、C三类地址中,主机号全为“1”的地址为广播地址。这类地址用来同时向指定网络的所有主机发送信息。例如,如果某台主机使用55为目标地址发送数据报时,则网络地址为的网络中的所有主机都能收到该数据报。

回送地址:在IP地址中,首字节数值为“127”的地址是一个保留地址,称为回送地址。如:即为一个回送地址。该类地址用于网络测试或本机进程间通信。发送到这种地址的数据报不输出到线路上,而是立即被返回,又当作输入数据报在本机内部进行处理。例如,常用的“ping”命令,就是发送一个将回送地址作为目的地址的数据报,以测试IP软件能否接受和处理数据报。10.*.*.*,172.16.*.*-172.31.*.*,192.168.*.*,DHCP:,00-1992.子网与掩码如上所述,IP地址最初采用的是网络地址和主机地址两级结构,然而在实际组网过程中,常常会出现使用C类地址时,主机编址空间不够,而使用A类或B类地址时,又会造成大量IP地址浪费的现象。为此,IP地址现在多采用三级结构,即IP地址=网络地址+子网地址+主机地址。把每个网络的主机地址空间根据需要再进一步划分成若干个子网,则原来两级地址结构中的主机地址又细分为子网地址和主机地址,子网地址位数根据子网的实际规模来确定。具体三级结构地址的确定需要借助子网掩码来实现。

子网掩码是一个32位地址掩码,对应于网络地址和子网地址的地址掩码位设置为“1”,而对应于主机地址的地址掩码位设置为“0”。子网掩码用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。3.端口号按照TCP/IP模型的描述,应用层所有的应用进程(应用程序)都可以通过传输层再传送到IP层,传输层从IP层收到数据后必须交付给指明的应用进程,因此必须给应用层的每一个应用程序赋予一个非常明确的标志。由于在因特网上使用的计算机的操作系统种类很多,不同的系统会使用不同的进程标识符,因此无法采用计算机中的进程标识符来作为标志,必须采用统一的方法对TCP/IP体录的应用进程进行标志。为了标识通信实体中进行通信的进程,TCP/IP协议提出了协议端口(protocolport,简称端口)的概念。端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序通过系统调用与某端口绑定(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据也通过该端口输出。类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来区别不同的端口。TCP/IP协议使用一个16位的整数来标识一个端口,它的范围是0~65535。由于TCP协议和UDP协议是两个完全独立的软件模块,因此各自的端口号也相互独立。如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。服务器端的端口号又分为两类,最重要的一类叫公认端口号(well-knownportnumber)或系统端口号,从0~1023,它们紧密绑定于一些服务。通常这些端口的通信明确表明了某种服务的协议。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69,HTTP通信的端口号实际上总是80端口等。另一类叫注册端口号(RegisteredPorts),从1024~49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。例如,许多系统处理动态端口从1024左右开始。使用这类端口号必须在IANA按照规定的手续登记,以防重复。SOCKET编程5.1.3TCP应用编程的一般步骤不论是多么复杂的TCP应用程序,网络通信的最基本前提就是客户端要先和服务器建立TCP连接,然后才可以在此基础上相互传输数据。由于服务器需要同时为多个客户端服务,因此程序相对复杂一些。在服务器端,程序员需要编写程序不断地监听客户端是否有连接请求,一旦接受了客户端连接请求,即能识别是哪个客户;而客户端与服务器连接则相对比较简单,只需要指定连接哪个服务器即可。一旦双方建立了连接并创建了对应的套接字,就可以相互传输数据了。在程序中,发送和接收数据的方法都是一样的,区别仅是方向不同。5.1.3TCP应用编程的一般步骤(续)编写服务器端程序的一般步骤为:

使用对套接字封装后的类,编写基于TCP的服务器端程序的一般步骤为:(1)创建一个TcpListener对象,然后调用该对象的Start方法在指定的端口进行监听。(2)在单独的线程中,循环调用AcceptTcpClient方法接受客户端的连接请求,并根据该方法的返回的结果得到与该客户端对应的TcpClient对象。(3)每得到一个新的TcpClient对象,就创建一个与该客户对应的线程,在线程中与对应的客户进行通信。(4)根据传送信息的情况确定是否关闭与客户的连接。5.1.3TCP应用编程的一般步骤(续)编写客户端程序的一般步骤为:使用对套接字封装后的类,编写基于TCP的客户端程序的一般步骤如下:(1)利用TcpClient的构造函数创建一个TcpClient对象。(2)使用Connect方法与服务器建立连接。(3)利用TcpClient对象的GetStream方法得到网络流,然后利用该网络流与服务器进行数据传输。(4)创建一个线程监听指定的端口,循环接收并处理服务器发送过来的信息。(5)完成工作后,向服务器发送关闭信息,并关闭与服务器的连接。通信过程根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

(1)服务器监听服务器监听时服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求客户端请求是指由客户端的套接字发出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后再向服务器端套接字提出连接请求。

(3)连接确认连接确认是指当服务器端套接字监听到(或接收到)客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。在TCP/IP协议族中,传输层主要包括TCP和UDP两种通信协议,它们以不同的方式实现两台主机中的不同应用程序之间的数据传输,即数据的端到端传输。由于它们的实现方式不同,因此各有一套属于自己的端口号,且相互独立。在基于C/S模式的一次通信中,服务器(server)首先启动处于监听状态,每次的服务请求由客户端(client)发起,完成前面叙述的过程。环境下,为了实现这一过程,为服务器端提供了TcpListener类,为客户端提供了TcpClient类。实现的过程:网络连接数据传送1.服务器核心代码:IPAddresslocalAddress;privateconstintport=2015;privateTcpListenermyListener;///开始启动服务器监听myListener=newTcpListener(localAddress,port);myListener.Start();实现过程:IPAddresslocalAddress=(Dns.GetHostAddresses(""))[0];privateconstintport=2015;privateTcpListenermyListener;privatevoidbutton1_Click(objectsender,EventArgse)

{myListener=newTcpListener(localAddress,port);myListener.Start();label2.Text=localAddress.ToString();label5.Text=port.ToString();label6.Text="TCP";ThreadmyThread=newThread(ListenClientConnect);myThread.Start();

}

privatevoidListenClientConnect()

{while(true)

{ListenClientDelegated=newListenClientDelegate(ListenClient);

}

}privatedelegatevoidListenClientDelegate(outTcpClientclient);privatevoidListenClient(outTcpClientnewClient)

{try

{newClient=myListener.Ac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论