




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一单元网络编程学习指导书一:学习目标(知识点列表)知识点知识点重要性掌握程度知识点关联基于TCP协议的网络编程1、 Socket类2、 ServerSocket类中熟练域名和IP(参见学习资料第二册180页),对该主题下所有这几类,非常的常用必须灵活把握,对后续编写基于TCP协议的软件提供可靠基础。适当了解网络基础知识对于学习网络编程是有必要的,比如什么是IP和端口了解什么是UDP网络编程?明白UDP网络编程与Tcp编程的区别:Tcp是建立有连接的网络通信,而UDP不需要建立连接,通过在网络广播发送理解Socket和ServerSocket是学习网络编程的关键点。基于UDP协议的网络编程1、 DategramSocket类2、 DatagramPacket类高熟练 是此知识点运用的前提,因此在学习此部分时,需要回顾下有关输入输出的知识点。适当了解网络基础知识对于学习网络编程是有必要的,比如什么是IP和端口了解什么是UDP网络编程?明白UDP网络编程与Tcp编程的区别:Tcp是建立有连接的网络通信,而UDP不需要建立连接,通过在网络广播发送理解DatagramSocket和DatagramPacket是学习UDP网络编程的突破点DatagramSocket表示用来发送和接收数据报包的套接字,不建立连接,不进行数据数据读写DatagramPacket表示数据报包,数据报包用来实现无连接包投递服务1、 传送数据的载体2、 包含从一台机器路由到另一台机器的信息web相关类1、 URL2、 URLConnection3、 URLEncoder中了解了解web基础概念是有必要的 例如:URL、Http了解URLConnection:代表应用程序和 URL 之间的通信链接了解创建 URL连接需要的步骤重难点1:Java编写TCP、UDP程序 学习方法: 首先复习下Ip和端口: IP地址:给因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP 地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。 端口:一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口举个简单的例子吧:你把ip地址想象成一个人;端口呢,分别是 眼睛,耳朵,鼻子,嘴巴;你(ip)要和别人说话,用嘴巴;你(ip)要听别人说话,用耳朵;你(ip)要闻味道,要用鼻子;网络上,每个端口都承载了不同的通信的功能。Java编写UDP网络程序1.1,DatagramSocketDatagramSocket有如下构造方法:1,DatagramSocket() :构造数据报套接字并将其绑定到本地主机上任何可用的端口。 2,DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。 3,DatagramSocket(int port, InetAddress laddr):创建数据报套接字,将其绑定到指定的本地地址。即指定网卡发送和接收数据.如果在创建DatagramSocket对象时,没有指定网卡的IP 地址,在发送数据时,底层驱动程序会自动选择一块网卡去发送,在接收数据时,会接收所有的网卡收到的与端口一致的数据.发送信息时,可以不指定端口号,接收信息时,要指定端口号,因为要接收指定的数据.发送数据使用DatagramSocket.send(DatagramPacket p)方法,接收数据使用DatagramSocket.receive(DatagramPacket p)方法.1.2,DatagramPacketDatagramPacket类有如下构造方法:1,DatagramPacket(byte buf, int length):构造 DatagramPacket,用来接收长度为length的数据包。2,DatagramPacket(byte buf, int length, InetAddress address, int port):构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。接收数据时使用第一次构造方法,发送数据时使用第二种构造方法.1.3,InetAddressJava中对IP地址进行包装的类,DatagramPacket.getAddress()可以获取发送或接收方的IP地址.DatagramPacket.getPort()可以获取发送或接收方的端口.1.4,UDP程序例子发送程序:.DatagramPacket; .DatagramSocket; .InetAddress; publicclassUdpSend publicstaticvoidmain(Stringargs)throwsException DatagramSocketds=newDatagramSocket(); Stringstr=hello,world!; DatagramPacketdp=newDatagramPacket(str.getBytes(),str.length(),InetAddress.getByName(05),3000); ds.send(dp); ds.close();/关闭连接 接收程序:.DatagramPacket; .DatagramSocket; publicclassUdpRecv publicstaticvoidmain(Stringargs)throwsException DatagramSocketds=newDatagramSocket(3000); bytebuf=newbyte1024; DatagramPacketdp=newDatagramPacket(buf,buf.length); ds.receive(dp); Stringstr=newString(dp.getData(),0,dp.getLength(); System.out.println(str); System.out.println(IP:+dp.getAddress().getHostAddress()+,PORT:+dp.getPort(); ds.close(); 测试要先运行接收程序,再运行发送程序.如果接收程序没有接收到数据,则会一直阻塞,接收到数据后才会关闭程序.如果网络上没有数据发送过来,接收程序也没有阻塞,通常都是使用了一个已经被占用的端口.理解UDP编程的实现基本步骤1、创建数据报2、发送数据报包3、接受数据报包重难点2:Socket与ServerSocket学习方法:1、 理解Socket类的含义Socket(套接字)是服务器与客户的连接桥梁,套接字是两台机器间通信的端点,首先通过套接字建立客户和服务器的连接,然后通过套接字这个载体实现将客户与服务器之间的信息传递,ServerSocket(服务器套接字)等待请求通过网络传入的Socket,然后可以向请求者(Socket)返回结果。 理解Socket编程的实现基本步骤1、 如何建立客户和服务连接2、如何实现客户与服务器之间的信息传递2、 理解Socket类的使用1) 构造Socket socket=new Socket(0,5657);实现向服务器(0)的5657端口发送请求2) 获得读写套接字的I/O流OutputStream os=socket.getOutputStream();InputStream is=socket.getInputStream();3) 使用I/O链读写套接字(参考I/O部分),实现信息的传递3、 理解ServerSocket类的作用等待请求通过网络传入的Socket,若侦听到即接受到此套接字4、 ServerSocket类的使用1) 构造ServerSocketServerSocket server=new ServerSocket(5657);在当前主机上创建服务端口56572) 侦听并接受到此套接字的连接Socket formClient=server.accept();等待并接受客户请求,具体含义有两方面:A)若侦听到则接受到客户端传送的套接字,服务器与客户建立连接B)若没有侦听到客户请求则阻塞线程,即等待客户请求5、 完成简单的网络编程package tcp;import java.io.*;import .*;public class SimpleSocketClient public static void main(String args) Socket socket = null; InputStream is = null; OutputStream os = null; /服务器端IP地址 String serverIP = ; /服务器端端口号 int port = 10000; /发送内容 String data = Hello; try /建立连接 socket = new Socket(serverIP,port); /发送数据 os = socket.getOutputStream(); os.write(data.getBytes(); /接收数据 is = socket.getInputStream(); byte b = new byte1024; int n = is.read(b); /输出反馈数据 System.out.println(服务器反馈: + new String(b,0,n); catch (Exception e) e.printStackTrace(); /打印异常信息 finally try /关闭流和连接 is.close(); os.close(); socket.close(); catch (Exception e2) 在该示例代码中建立了一个连接到IP地址为,端口号码为10000的TCP类型的网络连接,然后获得连接的输出流对象,将需要发送的字符串“Hello”转换为byte数组写入到输出流中,由系统自动完成将输出流中的数据发送出去,如果需要强制发送,可以调用输出流对象中的flush方法实现。在数据发送出去以后,从连接对象的输入流中读取服务器端的反馈信息,读取时可以使用IO中的各种读取方法进行读取,这里使用最简单的方法进行读取,从输入流中读取到的内容就是服务器端的反馈,并将读取到的内容在客户端的控制台进行输出,最后依次关闭打开的流对象和网络连接对象。这是一个简单的功能示例,在该示例中演示了TCP类型的网络客户端基本方法的使用,该代码只起演示目的,还无法达到实用的级别。如果需要在控制台下面编译和运行该代码,需要首先在控制台下切换到源代码所在的目录,然后依次输入编译和运行命令: javac d . SimpleSocketClient.java java tcp.SimpleSocketClient和下面将要介绍的SimpleSocketServer服务器端组合运行时,程序的输出结果为: 服务器反馈:Hello介绍完一个简单的客户端编程的示例,下面接着介绍一下TCP类型的服务器端的编写。首先需要说明的是,客户端的步骤和服务器端的编写步骤不同,所以在学习服务器端编程时注意不要和客户端混淆起来。在服务器端程序编程中,由于服务器端实现的是被动等待连接,所以服务器端编程的第一个步骤是监听端口,也就是监听是否有客户端连接到达。实现服务器端监听的代码为: ServerSocket ss = new ServerSocket(10000);该代码实现的功能是监听当前计算机的10000号端口,如果在执行该代码时,10000号端口已经被别的程序占用,那么将抛出异常。否则将实现监听。服务器端编程的第二个步骤是获得连接。该步骤的作用是当有客户端连接到达时,建立一个和客户端连接对应的Socket连接对象,从而释放客户端连接对于服务器端端口的占用。实现功能就像公司的前台一样,当一个客户到达公司时,会告诉前台我找某某某,然后前台就通知某某某,然后就可以继续接待其它客户了。通过获得连接,使得客户端的连接在服务器端获得了保持,另外使得服务器端的端口释放出来,可以继续等待其它的客户端连接。实现获得连接的代码是: Socket socket = ss.accept();该代码实现的功能是获得当前连接到服务器端的客户端连接。需要说明的是accept和前面IO部分介绍的read方法一样,都是一个阻塞方法,也就是当无连接时,该方法将阻塞程序的执行,直到连接到达时才执行该行代码。另外获得的连接会在服务器端的该端口注册,这样以后就可以通过在服务器端的注册信息直接通信,而注册以后服务器端的端口就被释放出来,又可以继续接受其它的连接了。连接获得以后,后续的编程就和客户端的网络编程类似了,这里获得的Socket类型的连接就和客户端的网络连接一样了,只是服务器端需要首先读取发送过来的数据,然后进行逻辑处理以后再发送给客户端,也就是交换数据的顺序和客户端交换数据的步骤刚好相反。这部分的内容和客户端很类似,所以就不重复了,如果还不熟悉,可以参看下面的示例代码。最后,在服务器端通信完成以后,关闭服务器端连接。实现的代码为: ss.close();这就是基本的TCP类型的服务器端编程步骤。下面以一个简单的echo服务实现为例子,介绍综合使用示例。echo的意思就是“回声”,echo服务器端实现的功能就是将客户端发送的内容再原封不动的反馈给客户端。实现的代码如下: package tcp;import java.io.*;import .*;public class SimpleSocketServer public static void main(String args) ServerSocket serverSocket = null; Socket socket = null; OutputStream os = null; InputStream is = null; /监听端口号 int port = 10000; try /建立连接 serverSocket = new ServerSocket(port); /获得连接 socket = serverSocket.accept(); /接收客户端发送内容 is = socket.getInputStream(); byte b = new byte1024; int n = is.read(b); /输出 System.out.println(客户端发送内容为: + new String(b,0,n); /向客户端发送反馈内容 os = socket.getOutputStream(); os.write(b, 0, n); catch (Exception e) e.printStackTrace(); finally try /关闭流和连接 os.close(); is.close(); socket.close(); serverSocket.close(); catch(Exception e) 在该示例代码中建立了一个监听当前计算机10000号端口的服务器端Socket连接,然后获得客户端发送过来的连接,如果有连接到达时,读取连接中发送过来的内容,并将发送的内容在控制台进行输出,输出完成以后将客户端发送的内容再反馈给客户端。最后关闭流和连接对象,结束程序。在控制台下面编译和运行该程序的命令和客户端部分的类似。这样,就以一个很简单的示例演示了TCP类型的网络编程在Java语言中的基本实现,总结:客户端具体步骤:a) 获得服务器端IP地址b) 获得服务器端端口号c) 获得发送内容内容d) 建立连接e) 发送数据f)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市2025商务部投资促进事务局招聘13人笔试历年参考题库附带答案详解
- 八公山区2025安徽淮南八公山区老年学校(大学)工作人员特设岗位招聘1人笔试历年参考题库附带答案详解
- 乌当区2025贵州乌当区农业农村局招聘驻嘉旺屠宰场动物检疫协检人员笔试历年参考题库附带答案详解
- 黔西南布依族苗族自治州2025贵州黔西南州贞丰县事业单位引进高层次人才和急需紧缺人才25人笔试历年参考题库附带答案详解
- 2025浙江温州市鹿通文化旅游有限公司招聘11人笔试参考题库附带答案详解
- 2025年河北石家庄市供热管理集团有限公司劳务派遣制人员14人笔试参考题库附带答案详解
- 2025年广西盐业集团公开招聘18人笔试参考题库附带答案详解
- 2025年国网青海省电力公司高校毕业生招聘(第二批)调剂笔试参考题库附带答案详解
- 2025年中国铁路南宁局集团有限公司招聘高校毕业生73人三(本科及以上学历)笔试参考题库附带答案详解
- 2025年2月云南思茅产业园区紧缺人才127人笔试参考题库附带答案详解
- 马克思主义发展史课件
- GB/T 5780-2016六角头螺栓C级
- GB 1903.50-2020食品安全国家标准食品营养强化剂胆钙化醇(维生素D3)
- 横河DCS-培训讲义课件
- 部编版三年级下册语文全册课件【完整版】
- 初中数学几何1000题专项训练(含详解分析)-最新
- 欧洲非常规的知识产权战略课件
- 外滩建筑介绍
- 青少年亲社会行为量表
- 你好,无废校园主题班会
- 中药煎服方法
评论
0/150
提交评论