版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序开发网络通信重庆大学计算机学院主要内容
协议,主机,端口
URLConnection
Socket通信
多客户机制
扩展:ftp,http等下载和通信程序网络基础知识
IP地址如:,0
主机名(hostname)如:
端口号(portnumber)如:80,21,23,25
服务类型(service)http,telnet,ftp,smtp两类传输协议
TCP(TransportControlProtocol)面向连接的能够提供可靠的流式数据传输的协议。类似于打电话的过程。URL,URLConnection,Socket,ServerSocket等类都使用TCP协议进行网络通讯。
UDP(UserDatagramProtocol)非面向连接的提供不可靠的数据包式的数据传输的协议。类似于从邮局发送信件的过程。DatagramPacket,DatagramSocket,MulticastSocket等类使用UDP协议进行网络通讯。URL类
URL(UniformResourceLocator)一致资源定位器的简称,它表示Internet上某一资源的地址。
URL的组成protocol:resourceName协议名指明获取资源所使用的传输协议,如http、ftp、gopher、file等,资源名则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。URL例子
/
/home/welcome.html
:80/Gamelan/network.html#BOTTOM构造URL对象publicURL(Stringspec)URLurlBase=newURL(“/”);publicURL(URLcontext,Stringspec)URLibm=newURL(“/pages/");URLibmgame=new(ibm,"game.html");例外处理try{URLmyURL=newURL(...)}catch(MalformedURLExceptione){.//exceptionhandlercodehere.....}获取URL对象属性
publicStringgetProtocol()
publicStringgetHost()
publicStringgetPort()
publicStringgetFile()
publicStringgetRef()类InetAddress
InetAddress类是IP地址封装类
InetAddressgetByName(Stringhostname)
InetAddressgetByAddress(byte[]addr)
StringgetHostAddress()
StringgetHostName()获得有关IP地址的各种属性通过URL读取WWW信息publicclassURLReader{publicstaticvoidmain(String[]args)throwsException{URLcqu=newURL(“/");BufferedReaderin=newBufferedReader(newInputStreamReader(cqu.openStream()));StringinputLine;while((inputLine=in.readLine())!=null)System.out.println(inputLine);in.close();}}使用URLConnection读写WWW资源try{URLcqu=newURL("/");URLConnectionntc=cqu.openConnection();}catch(MalformedURLExceptione){//newURL()failed...}catch(IOExceptione){//openConnection()failed...}
得到URLConnection对象之后,可以用如下方法得到相应的输入/输出流:
getInputStream()
getOutputStream()之后就可以读写输入/输出流,完成数据的读写。socket通讯
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个socket。
socket通常用来实现客户方和服务方的连接。Client-serverandServiceSocketCommunicationSocket编程模型ClientServerServerSocketwaitrequestnewSocketnewSocketacceptsendRead/WriteDatareceiveRead/WriteDatareceivesendcloseCloseSocketCloseSocketclose创建Socket和ServerSocket
Socket(InetAddressaddress,intport);
Socket(InetAddressaddress,intport,booleanstream);
Socket(Stringhost,intport);
Socket(Stringhost,intport,booleanstream);
ServerSocket(intport);
ServerSocket(intport,intcount);客户端Socket的建立try{Socketsocket=newSocket(”",2000);}catch(IOExceptione){System.out.println("Error:"+e);}服务器端Socket的建立ServerSocketserver=null;try{server=newServerSocket(2000);}catch(IOExceptione){System.out.println("cannotlistento:"+e);}Socketsocket=null;try{socket=server.accept();}catch(IOExceptione){System.out.println("Error:"+e);}打开输入/输出流PrintStreamos=newPrintStream(newBufferedOutputStream(socket.getOutputStream()));DataInputStreamis=newDataInputStream(socket.getInputStream());PrintWriterout=newPrintWriter(socket.getOutputStream(),true);BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));关闭socket
os.close();
is.close();
socket.close();
注意关闭的顺序例客户端程序importjava.io.*;.*;publicclassTalkClient{publicstaticvoidmain(Stringargs[]){try{Socketsocket=newSocket(“”,4700);BufferedReadersin=newBufferedReader(newInputStreamReader(System.in));PrintWriteros=newPrintWriter(socket.getOutputStream());BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream()));Stringreadline;readline=sin.readLine();while(!readline.equals(“bye”)){os.println(readline);os.flush();System.out.println(“Client:”+readline);System.out.println(“Server:”+is.readLine());readline=sin.readLine();}os.close();is.close();socket.close();}catch(Exceptione){System.out.println(“Error”+e);}}}服务器端程序:importjava.io.*;.*;publicclassTalkServer{publicstaticvoidmain(Stringargs[]){try{ServerSocketserver=null;try{server=newServerSocket(4700);}catch(Exceptione){System.out.println(“cannotlistento:”+e);}Socketsocket=null;try{socket=server.accept();}catch(Exceptione){System.out.println(“Error.”+e);}Stringreadline;BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriteros=newPrintWriter(socket.getOutputStream());BufferedReadersin=newBufferedReader(newInputStreamReader(System.in));System.out.println(“Client:”+is.readLine());readline=sin.readLine();while(!readline.equals(“bye”)){os.println(readline);os.flush();System.out.println(“Server:”+readline);System.out.println(“Client:”+is.readLine());readline=sin.readLine();}os.close();is.close();socket.close();server.close();}catch(Exceptione){System.out.println(“Error:”+e);}}}运行结果Server:hello!Client:hello!Server:howareyou?Client:Iamfine,thankyou!…Client:bye.Server:bye.多客户机制SocketThreadAClientASocketThreadBServerSocketClientBThreadCSocketClientC服务器端程序:MultiTalkServer.javatry{serverSocket=newServerSocket(4700);}catch(IOExceptione){System.out.println("Couldnotlisten");System.exit(-1);}while(listening){newServerThread(serverSocket.accept(),clientnum).start();clientnum++;}程序ServerThread.javaimportjava.io.*;.*;publicclassServerThreadextendsThread{Socketsocket=null;clientnum;publicServerThread(Socketsocket,intnum){this.socket=socket;clientnum=num+1;}publicvoidrun(){try{Stringline;BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriteros=newPrintWriter(socket.getOutputStream());BufferedReadersin=newBufferedReader(newInputStreamReader(System.in));System.out.println(“Client”+clientnum+”:”+is.readLine());line=sin.readLine();while(!line.equals(“bye”)){os.println(line);os.flush();System.out.println(“Server:”+line);System.out.println(“Client:”+clientnum+“:”is.readLine());line=sin.readLine();}os.close();is.close();socket.close();}catch(Exceptione){System.out.println(“Error:”+e);}}}server.close();}catch(Exceptione){System.out.println(“Error:”+e);}}}数据报通信
TCP(TransportControlProtocol)面向连接的能够提供可靠的流式数据传输的协议。类似于打电话的过程。URL,URLConnection,Socket,ServerSocket等类都使用TCP协议进行网络通讯。
UDP(UserDatagramProtocol)非面向连接的提供不可靠的数据包式的数据传输的协议。类似于从邮局发送信件的过程。DatagramPacket,DatagramSocket,MulticastSocket等类使用UDP协议进行网络通讯。比较通信方协议是否需要连可靠性数据量应用式接无连接,每不可靠,64KB之数据会丢失数据报UDP个报包括源地址和目标地址时间服务,ping程序通信内可靠,http服务,流式通TCP需要连接大量数Telnet服务,信数据不会丢失据Ftp服务数据报通信
TCP有建立时间
UDP传输有大小限制:64K以内
TCP的应用:Telnet,ftp
UDP的应用:ping数据报通信
DatagramSocket()
DatagramSocket(intport)
DatagramPacket(byteibuf[],intilength)
DatagramPacket(byteibuf[],intilength,InetAddressiaddr,intiport);数据报通信
收数据报:DatagramPacketpacket=newDatagramPacket(buf,256);socket.receive(packet);
发数据报DatagramPacketpacket=newDatagramPacket(buf,buf.length,address,port);socket.send(packet);客户方程序QuoteClient.javaimportjava.io.*;.*;importjava.util.*;publicclassQuoteClient{publicstaticvoidmain(String[]args)throwsIOException{if(args.length!=1){System.out.println(“Usage:javaQuoteClient<hostname>”);return;}DatagramSocketsocket=newDatagramSocklet();//sendrequestByte[]buf=newbyte[256];InetAddressaddress=InetAddress.getByName(args[0]);DatagramPacketpacket=newDatagramPacket(buf,buf.length,address,4445);socket.send(packet);//getresponsepacket=newDatagramPacket(buf,buf.length);socket.receive(packet);//displayresponseStringreceived=newString(packet.getData());System.out.println(“QuoteoftheMoment:”+received);socket.close();服务器方程序:QuoteServer.javapublicclassQuoteServer{publicstaticvoidmain(Stringargs[])throwsjava.io.IOException{newQuoteServerThread().start();}}程序QuoteServerThread.javaimportjava.io.*;.*;importjava.util.*;publicclassQuoteServerThreadextendsThread{protectedDatagramSocketsocket=null;protectedBufferedReaderin=null;protectedbooleanmoreQuotes=true;publicQuoteServerThread()throwsIOException{this(“QuoteServerThread”);}publicQuoteServerThread(S)throwsIOException{super(name);socket=newDatagramSocket(4445);try{in=newBufferedReader(newFileReader(“one-liners.txt”));}catch(FileNotFoundExceptione){System.err.println(“Couldnotopenquotefile.Servingtimeinstead.”);}}publicvoidrun(){while(moreQuotes){try{byte[]buf=newbyte[256];DatagramPacketpacket=newDatagramPacket(buf,buf.length);socket.receive(packet);StringdString=null;if(in==null)dString=newDate().toString();elsedString=getNextQuote();buf=dString.getByte();//sendtheresponsetotheclientat”address”and//“port”InetAddressaddress=packet.getAddress();intport=packet.getPort();packet=newDatagramPacket(buf,buf.length,address,port);socket.send(packet);}catch(IOExceptione){e.printStackTrace();moreQuotes=false;}}socket.close();}protectedStringgetNextQuotes(){StringreturnValue=null;try{if((returnValue=in.readLine())==null){in.close();moreQuotes=false;returnValue=“Nomorequotes.Goodbye.”;}}catch(IOEceptione){returnValue=“IOExceptionoccurredinserver”;}returnreturnValue;}使用数据报进行广播通信
DatagramSocket只运行数据报发往一个目的地址
MulticastSocket将数据报以广播方式发送到该端口的所有客户.
MulticastSocket用在客户端,监听服务器广播来的数据客户方程序:MulticastClient.javaimportjava.io.*;.*;importjava.util.*;publicclassMulticastClient{publicstaticvoidmain(Stringargs[])throwsIOException{MulticastSocketsocket=newMulticastSocket(4446);InetAddressaddress=InetAddress.getByName(“”);socket.joinGroup(address);DatagramPacketpacket;//getafewquotesfor(inti=0;i<5;i++){byte[]buf=newbyte[256];packet=newDatagramPacket(buf,buf.length);socket.receive(packet);Stringreceived=newS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《焊接检验员培训》课件
- 《icu患者镇静管理》课件
- 安徽省2017年中考道德与法治真题试卷(含答案)
- 辽宁省沈阳市第一二六中学教育集团2024-2025学年八年级上学期期中考试数学试卷(无答案)
- 2024年新高一英语初升高衔接《动词时态、语态和主谓一致》含答案解析
- 心脏活动报道课件
- 《变革管理余世维》课件
- 《GIS的数据结构》课件
- 热离子管市场发展现状调查及供需格局分析预测报告
- 电缆接头产业深度调研及未来发展现状趋势
- 《医疗器械使用质量监督管理办法》.ppt
- 高中数学复习专题讲座不等式知识的综合应用
- 工程勘察设计收费标准(2002年修订本)98168
- 乙烯裂解大阀密封结构修复及预防处理方法
- 食堂每周菜谱3个月不重复
- 生产现场作业十不干PPT课件
- 物料承认管理办法
- 业主委员会成立流程图
- AEFI防范与处置PPT课件
- (完整版)全usedtodo,beusedtodoing,beusedtodo辨析练习(带答案)
- 小学综合实践活动方便筷子教案三年级上册精品
评论
0/150
提交评论