




免费预览已结束,剩余61页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章Java网络编程,南京农业大学谢忠红,11.1Java和Internet11.2Socket-编程11.3URL类11.4Datagram(数据报),11.1Java和Internet,网络定义:将分布在不同地理区域的计算机用通信线路互联起来的一个具有强大功能的网络系统,Internt提供的服务包括www(World-WidWeb)服务、电子邮件(E-mail)服务、文件传输(FTP)服务和远程登陆(Telnet)服务等,不同网络之间的互联考完标准语言TCP/IP协议,TCP/IP(传输控制协议/网间协议):internet的主要协议,定义了计算机和外设进行通信所使用的规则(应用层,传输层,网络层,链路层).,目前最流行的商业化协议TCP/IP协议(传输控制协议/网间协议),图8.1TCP/IP协议的层次结构,网络的一些重要术语DNS(域名服务器)例:IP地址:TCP/IP网络中的每台计算机都有唯一的地址-IP地址.例,Socket,URL,Datagram,Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道.(TCP/IP)URL(uniformResouseLocation)是三大功能中最高级的一种,通过URLJava程序可以使用http、file、ftp等协议,获取远端计算机上的资源信息,方便快捷地开发Internet应用程序Datagram更低级的网络传输方式,它把数据的目的地址在写在数据包中,然后将数据包放在网络上.(UDP),.InetAddress类作用:存储服务器的IP地址,提供一系列静态工厂方法。常见方法:(1)InetAddressgetLocalHost()作用:返回本机地址(机器名+IP)(2)InetAddressgetByName(String)作用:给定计算机名/域名,返回该机的地址。(3)StringgetHostAdress()作用:返回本机IP地址,InetAddress,举例1:.*;publicclassgetLocalHostTestpublicstaticvoidmain(Stringargs)InetAddressmyIP1=null,myIP2=nulltrymyIP1=InetAddress.getLocalHost();myIP2=InetAddress.getByName(xzh);catch(UnknownHostExceptione)System.out.println(e.toString();System.out.println(myIP1=+myIP1.toString();System.out.println(myIP2=+myIP2.toString();,myIP1=LENOVO-A5267B58/00myIP2=LENOVO-A5267B58/00,例.*;publicclassgetIPpublicstaticvoidmain(Stringargs)InetAddressIP1=null,IP2=null;tryIP1=InetAddress.getByName();IP2=InetAddress.getAllByName();catch(UnknownHostExceptione)System.out.println(e.toString();System.out.println(IP1.toString();System.out.println(IP2.toString();,11.2Socket-套接字编程,服务器:运行提供服务的程序的计算机侦听建立连接的请求客户机:使用由服务器程序所提供的服务的计算机试着与某个服务器建立连接,提供电子邮件服务、QQ聊天服务、MSN聊天服务、商务网站服务,收发email浏览网页,收发email浏览网页,服务器,客户机,Socket(套接字):连接的一个终端,Socket=IP+Port,Socket的作用:分辨internet上运行各种服务程序,网络服务器2,Mail,ftp,www,110,telnet,21,23,客户程序,Socket,IP,port,80,ServerSocket,布满插口的插座板,插头,Port(端口号):TCP/IP协议为每种服务定义了一个端口。端口号的作用:当一台计算机上运行不同服务器程序时,根据端口号不同提供相应的服务.端口号范围:1-65535,Java的Socket通信模式,服务器,Ss=newServerSocket(port#),s=Ss.accept(),OutputStream,InputStream,Socket.close()ServerSocket.close(),客户端,newSocket(host,port#),OutputStream,InputStream,Socket.close(),Socket,向服务器指定端口发出连接请求,2实现Socket通信ServerSocket类(布满插口的服务器)Socket类(插头),服务器程序,客户端程序,Mail,ftp,www,110,telnet,21,23,80,客户程序,Socket,IP,port,ServerSocket类作用:负责接受客户连接请求构造函数:ServerSocket(intport)throwsIOExceptionServerSocket(intport,intbacklog)throwsExceptionbacklog参数:显示设置连接请求的队列长度,只要被加入到连接请求队列才可能与服务器连接成功,ServerSocket实例方法:Socketaccept()作用:从连接队列中取一个客户机的连接请求,创建一个与客户连接的Socket对象InetAddressgetInetAddress()作用:返回服务器socket的本地地址getLocalPort()作用:获得本连接的端口号close()作用:使服务器释放占用的端口并断开与所有客户进程的连接,Socket类构造函数:Socket(Stringhost,intport)throwsunknownHostException,IOException作用:试图建立与服务器的连接,如果连接成功返回一个Socket对象,客户连接服务器时可能抛出的异常UnknownHostException:无法识别主机名字或IP地址ConnectException:服务器进程拒绝连接,或没有服务器进程监听制定端口SocketTimeoutException:等待连接超时BindException:无法把Socket对象与指定的本地IP地址或port绑定,实例方法publicInetAddressgetInetAddress()作用:返回远程服务器的地址。publicInetAddressgetLocalAddress()作用:获得客户本地的IP地址publicInputStreamgetInputStream()作用:获得输入流PublicOutputStreamgetOutputStream()作用:获得输出流Publicvoidclose()作用:关闭Socket连接,程序举例,功能描述:服务器程序向客户机程序发送字符串“hi”,服务器程序举例(p204),.*;importjava.io.*;publicclassMyserverpublicstaticvoidmain(Stringargs)tryServerSocketserverS=newServerSocket(5432);while(true)Sockets=serverS.accept();PrintStreamout=newPrintStream(s.getOutputStream();out.println(hi);out.close();s.close();catch(IOExceptione),客户机程序举例(p205),publicclassMyclientpublicstaticvoidmain(Stringargs)trySockets=newSocket(,5432);BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream();Stringx=in.readLine();System.out.println(readfromserver:+x);in.close();catch(IOExceptione),readfromserver:hi,3指定一协议编写客户/服务器程序,程序功能:演示一个简单的服务器与客户的交互即服务器客户机相互通一次信息。,Waitingconnectingrequirement,服务器规则:(1)向客户机发一个“user:”。(2)读取客户机提供的用户名。(3)如果用户名=“linda”发送“welcome!”。(4)如果用户名!=“linda”发送“wrongname”!。相应的客户机规则:(1)读取服务器反馈信息。(2)若反馈信息是“user:”,则向服务器发送用户名并执行(3),若反馈信息不“user:”退出。(3)读取服务器反馈信息。(4)若反馈信息是“welcome”!则显示登陆成功信息。(5)若反馈信息是”wrongname!”则显示输入错误用户名信息。,自定义协议规则,8.5Socket,.8.5Socket,创建服务器(端口号),定义数据成员,服务器等待网络连接,建立socket流,读客户端信息,向用户发出一个字符串,创建Socket实例,定义数据成员,建立socket流,读socket流(接收并显示),送用户名给服务器,关闭流,waitingforuser,1111,1111,user:/other,connetctingclient.,linda/other,提示用户登录成功,读socket流,User:linda,Welcome!/wrongname,Tryconnecting,服务器进程客户机进程,publicclassServerRegisterpublicstaticvoidmain(Stringargs)ServerSocketSs=newServerSocket(1111);Sockets=Ss.accept();PrintStreamout=newPrintStream(s.getOutputStream();BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream();,服务程序:,trywhile(true)System.out.println(sendtoClient:+“user:);out.println(“user:);Stringx=in.readLine();System.out.println(getfromClient:+x);if(x.equals(linda)System.out.println(sendtoClient+Loginwelcome!);out.println(“welcome!);elseout.println(“wrongname!);out.close();in.close();s.close();catch(IOExceptione)System.out.println(e.toString();,tryStringx=in.readLine();if(x.equals(“user:)System.out.printlngetfromServer:+x);System.out.println(sendtoServer:+linda);out.println(linda);x=in.readLine();System.out.println(“getfromServer+x);if(x=“welcome!”)System.out.println(“registersuccessfully”);if(x=“wrongname”)System.out.println(“registerunsuccessfully”);elseSystem.exit(0);out.close();in.close();s.close();catch(IOExceptione),客户机程序:CleintRegister,网络服务,4利用线程实现一个服务程序,为多个客户程序提供服务,classServerThreadextendsThreadprivateSockets;staticintcount=0;privateBufferedReaderin;PrintStreamout;publicServerThread(Sockets)throwsExceptionthis.s=s;count+;创建输入输出in和outstart();publicvoidrun()out.println(hi);out.println(youarenumber:+count);System.out.println(the+count+connectingserver);out.close();trys.close();catch(Exceptione),提供服务的线程:,publicclassmultiServerpublicstaticvoidmain()throwsExceptionServerSocketSs=newServerSocket(5432);trySystem.out.println(Server);while(true)Sockets=Ss.accept();trynewServerThread(s);catch(Exceptione)finallySs.close();000000,可以多个客户程序访问的服务器程序,客户机程序testmulti,publicclasstestmultipublicstaticvoidmain(Stringargs)throwsExceptioninti=0,len=10;System.out.println(Client:);Sockets=newSocketlen;for(i=0;ilen;i+)si=newSocket(,5432);BufferedReaderin=newBufferedReader(newInputStreamReader(si.getInputStream();PrintStreamout=newPrintStream(si.getOutputStream();Stringstr1=in.readLine();Stringstr2=in.readLine();System.out.println(gettingfromserver:+str1);System.out.println(gettingfromserver:+str2);out.close();si.close();,5编写简单发送邮件程序,SMTP协议(SimpleMailTransferProtocol)SMTP监听端口号:25SMTP客户程序:请求发送邮件SMTP服务器程序:负责将邮件发送至目的地常见邮件收发软件:Netscape/OutLookExpress,主要SMTP命令,importjava.io.*;.*;publicclassMyMailClientpublicstaticvoidmain(Stringargs)trySockets=newSocket(,25);Stringpassword=“1234“,Stringusername=xiezhonghong_cn;username=newsun.misc.BASE64Encoder().encode(username.getBytes();password=newsun.misc.BASE64Encoder().encode(password.getBytes();PrintStreamout=newPrintStream(s.getOutputStream();BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream();out.println(EHLO+xiezhonghong_cn);System.out.println(in.readLine();out.println(AUTHLOGIN+username+password);System.out.println(in.readLine();out.println(MAILFROM:+xiezhonghong_cn);System.out.println(in.readLine();out.println(RCPTTO:+xiezhonghong_cn);System.out.println(in.readLine();,编写一个程序向指定的邮箱发邮件,out.println(DATA);System.out.println(in.readLine();out.println(1111111111n);out.println(2222222223n);System.out.println(in.readLine();out.println(.n);System.out.println(in.readLine();out.println(QUIT);catch(Exceptione)System.out.println(error+e.toString();,有些SMTP服务器要求客户提共身份认证,这时客户应先发送“EHLO”命令,接着发送“AUTHLOGIN”命令,11.3URL类(UniformResourceLocator),URL的值:是表示网络上某个资源的地址。,:8080/index.html#chapter,传输协议,主机名,端口号,文件名,引用,URL的构造方法:(1)URL(Stringspec)例:URLurl=newURL(“:8080/cv/index.html”)作用:创建一个能找到该文件的URL对象(2)URL(URLu,Stringspec)例:URLbase=newURL(“,构造URL类(全名.URL),URL类的基本方法StringgetProtocol()作用:返回该URL对象使用的传输协议StringgetHost()intgetPort()StringgetFile()StringgetRef(),URL类的基本方法,构造URL的实例,.URL;importjava.io.*;.MalformedURLException;publicclasstestURLpublicstaticvoidmain(Stringargs)URLurl1;tryurl1=newURL(:8080/cv/index.html);displayURL(url1);/displayContent(url1);catch(MalformedURLExceptione)System.out.println(e.toString();,publicstaticvoiddisplayURL(URLurl)System.out.println(URLis);System.out.println(url.toString();System.out.println(url.getProtocol();System.out.println(url.getHost();System.out.println(url.getPort();System.out.println(url.getFile();System.out.println(url.getRef();,使用字节流访问URL资源URL类的一个方法:InputStreamopenStream()作用:返回一个输入流对象,数据源是URL对象所指的地址。,publicstaticvoiddisplayContent(URLurl)intc;InputStreamReaderin=newInputStreamReader(url.openStream();BufferedReaderbin=newBufferedReader(in);FileOutputStreamfout=newFileOutputStream(d:/njau.txt);while(c=(char)bin.read()!=-1)fout.write(char)c);System.out.print(char)c);bin.close();fout.close();,针对HTTP协议的URLConnection类URLConnection类的作用:作用:访问远程资源,和它建立连接。(探测到这个远程对象的属性下载、阅读该远程资源)使用方法:URLmyurl=newURL(“,URLConnection类常见实例方法intgetContentLength()作用:访问对象的长度StringgetContentType()作用:访问对象的类型longgetDate()作用:访问对象的当前日期InputStreamgetInputStream()作用:返回输入流对象,数据源是访问的该对象OuputStreamgetOuputStream()作用:返回输出流对象,输出目的地是访问的该对象,程序示例:通过java提供的URL类和URLConnection,从指定的网址上下载网页publicclassUseURLConnectionpublicstaticvoidmain(Stringargs)throwsExceptionURLurlname=newURL();URLConnectionuc=urlname.openConnection();UseURLConnectionx=newUseURLConnection();x.downloadContent(urlname,uc);,publicstaticvoiddownload(URLurlname,URLConnectionuc)charc;tryInputStreamin=uc.getInputStream();FileOutputStreamfout=newFileOutputStream(d:/njau.txt);while(c=(char)in.read()!=-1)fout.write(char)c);System.out.print(char)c);in.close();fout.close();catch(IOExceptione)System.out.println(e.toString();,URLhtml=getDocumentBase();/返回当前Applet所在的HTML文件的URLSystem.out.print(html);URLcodebase=getCodeBase();/返回当前AppletL文件的URLSystem.out.print(codebase);,获取小应用程序HTML页面的URL和小应用程序本身的URL的方法,importjava.applet.*;importjava.awt.*;publicclassimageextendsAppletImageimg;publicvoidinit()img=getImage(getCodeBase(),“IMAGES/FRUIT.JPG);publicvoidpaint(Graphicsg)intwidth=img.getWidth(this);intheight=img.getHeight(this);g.drawRect(52,52,width+30,height+30);g.drawImage(img,57,57,width+20,height+20,this);,11.4Datagram(数据报),TCP/IP协议:基于套接字具有高度的可靠性UDP协议(UserDatagramProtocol)到达时间,以及内容不能得到保证。,socket,server,client,datagram,server,client,.,建立一个数据报收发器DatagramSocket对象;,建立一个报文包Datagrampacket,等待网络某站点发过来的请求报文包,建立数据报收发器Datagramsocket对象,创建一请求报文包,发出请求报文包,获得请求报文包截取对方地址,创建带发送地址的报文包,发送出去,创建接收包,等待接收,服务器发送报文,客户机接收报文,报文收发器类DatagramSocket作用:收发数据包与Socket类的不同点:不存在一对一的连接,也不存在等待连接问题。构造函数:DatagramSocket(intport)DatagramSocket()方法:receive(报文包)send(报文包),报文包类DatagramPacket类作用:存放接受或要发送出去的报文。接受报文时报文包构造函数:DatagramPacket(bytebuf,intlength)发送报文时报文包构造函数:DatagramPacket(bytebuf,intlength,InetAdressadd,intport);,方法:InetAddressgetAddress():获得报文包来源的IP地址/或报文包正发送的目的地IPIntgetPort():同上BytegetData():返回收到报文的内容或发出报文的内容,服务器发送报文的标准步骤如下:1.定义数据成员DatagramSocketDataSR;DatagramPacketDatapacket;InetAddressaddress;/用来存放接收方的地址)intport;/用来存放接收方的端口号)byteBuf=newbyte256;/设定缓冲区,存放从接收/发出信息2.创建数据收发器DatagramSocket对象tryDataSR=newDatagramSocket(5432);catch(Exceptione),4.创建一个报文包DatagramPacket对象,等待有请求报文发送过来pleaseP=newDatagramPacket(buf,256);DataRS.receive(pleaseP);/在客户的请求包来之前一直等待5获得请求报文包,截取对方IP地址和port号InetAddressaddr=pleaseP.getAddress();intport=pleaseP.getPort();7.将需发送的数据送入缓冲区buf中8.建立发送报文包,用来用数据收发器发出sendP=newDatagramPacket(buf,buf.length,address,po
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 打造书香家庭课件结语
- 慢性肠炎的护理
- 慢性咳嗽知识课件
- 情系你我安全大家培训课件
- 陕建入职考试真题及答案
- 恶性心律失常护理查房
- 医院专业考试题目及答案
- 急救知识培训结构化课件
- 刑事诉法学考试题及答案
- 养老护理员考试题及答案
- 人教版(2024新版)七年级上册英语全册教案
- 临床微生物学检验标本的采集和转运试卷
- 佳酿贺喜升学宴金榜题名踏新程热烈庆祝某同学金榜题名模板
- 医学美容技术专业《美容医学咨询与沟通》课程标准
- 营养指导员理论知识考试题库及答案
- 2024生产安全事故隐患排查治理规定(修订征求意见稿)
- 2024年贵州贵安新区产业发展控股集团有限公司招聘笔试参考题库含答案解析
- JB-T 14509-2023 反渗透海水淡化设备技术规范
- 2024年儿童保健考试复习题库(含答案)
- 砖厂机械伤害安全培训课件
- 02J401 钢梯【含03年修改】图集
评论
0/150
提交评论