Java Socket 编程.ppt





《Java Socket 编程.ppt》由会员分享,可在线阅读,更多相关《Java Socket 编程.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SocketSocket编程编程1.Socket编程2.InetAddress3.URL4.网络应用工作流程5.套接字6.Socket工作步骤7.Socket客户端服务器工作图8.ServerSocket和Socket9.创建客户端、服务器数据发送接收实例10.扫描端口及自义通信协议11.设置连接超时时间和请求队列12.设置数据缓冲区13.创建多线程服务器14.为客户的分配线程15.使用JDK线程池方式创建多线程服务器16.使用线程池注意点17.UDP18.UDP工作步骤及通信19.总结技术成就梦想-贝福科技高端人才培训计划Socket编程Socke编程就是指网络编程。服务器:提供信息资源的计
2、算机或服务器。客户机:请求信息资源的计算机或程序。某些情况下当客户机和服务器互相请求,互相提供信息的时候,很难区分谁是服务器,谁是客户机。传输协议:TCP(TransmissionControlProtocol,传输控制协议):“面向连接”,可靠的、基于字节流的传输层(Transport layer)通信协议。如:打电话。面向连接服务要经过三个阶段:数据传数前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。面向连接服务,可确保数据传送的次序和传输的可靠性。UDP(UserDatagramProtocol,用户数据包协议):“面向非连接”,在正式通信前不必与对方先建立连接,不管对方状
3、态就直接发送。如:写信。无连接服务的特点是:无连接服务只有传输数据阶段。消除了除数据通信外的其它开销。IP(Internet Protocol):计算机网络相互连接进行通信而设计的协议。互联网地址或Internet地址。是用来唯一标识互联网上计算机的逻辑地址。相当于电话号码。技术成就梦想-贝福科技高端人才培训计划OSIOSI七层协议模型七层协议模型技术成就梦想-贝福科技高端人才培训计划网络的层次模型网络的层次模型技术成就梦想-贝福科技高端人才培训计划InetAddressInetAddress代表了一个网络目标地址对象,封装了主机名和数字类型的地址信息。InetAddress ia=InetA
4、ddress.getLocalHost();/获得本机IP地址情况System.out.println(ia.getHostName();/得到主机名System.out.println(ia.getHostAddress();/得到主机地址InetAddress ia2=InetAddress.getByName(T1);/通过主机名获得信息System.out.println(ia2.getHostAddress();InetAddress ia3=InetAddress.getByAddress(new byte(byte)192,(byte)168,0,86);/通过主机IP获得信息S
5、ystem.out.println(ia3.getHostName();InetAddress ia4=InetAddress.getByName();/根据域名到DNS查询IpSystem.out.println(163 IP:+ia4.getHostAddress();技术成就梦想-贝福科技高端人才培训计划URL实现网页静态化类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。利用他可以获得网络资源,读取WWW服务器上的数据。这里我们将读取到的数据转换为流,然后保存到本地(类似网页静态化)。BufferedReader br=null;FileWriter fw=null;t
6、ry URL u=new URL(http:/ fis=u.openStream();/获得URL的输入数据流InputStreamReader fr=new InputStreamReader(fis);br=new BufferedReader(fr);/读取并封装字符流fw=new FileWriter(D:/163.html);/保存为文件String s=null;while(s=br.readLine()!=null)/操作System.out.println(s);fw.write(s);catch(MalformedURLException e)e.printStackTrac
7、e();catch(IOException e)e.printStackTrace();finallytry br.close();fw.flush();fw.close();catch(IOException e)e.printStackTrace();技术成就梦想-贝福科技高端人才培训计划网络应用工作流程网络应用工作流程我们用写信来举例:IP确定位置(相当于寄信的地址),端口确定该位置上的服务(具体是寄给哪个人的信)。IP可以定位到具体的计算机,端口代表计算机上提供的具体服务。IP与端口的组合得出一个套接字(将应用程序和端口连接起来),达到完全分辨网络上运行的程序的作用。技术成就梦想-贝福
8、科技高端人才培训计划TCP套接字为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了称为套接字(Socket)的接口。Socket可以看作是通信连接两端的收发器。Socket可以看成在两个程序进行通讯连接中的一个端点。Socket所要完成的通信就是基于连接的通信,建立连接所需的程序分别运行在客户端和服务器端。套接字连接就是客户端的套接字对象和服务器端的套接字对象通过输入/输出流连接在一起。套接字,Socket是网络上运行的程序之间双向通信链路的端点。技术成就梦想-贝福科技高端人才培训计划TCP套接字Socket部分通过将这3个参数结合起来,与一个Socket
9、绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。在Java中,套接字(通信端点)被抽象为类,我们只需要创建Socket类的对象,就可以使用套接字。Socket中有输入输出流对象,同时能实现服务器之间的数据传输。一个程序(Program B)将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket(Program A)中,使这段信息能传送到其他程序中。技术成就梦想-贝福科技高端人才培训计划Socket工作步骤l建立连接1.在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例.2.在客
10、户端通过主机和端口号创建一个 socket实例,连到服务器上.3.ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求l数据通信建立socket连接后,还应该建立输入输出数据流,客户程序可以向Socket写入请求,服务器程序处理请求,并把处理结果通过Socket返回给客户端,完成通过虚拟通道的数据通信;l拆除连接通信结束,将所建立的虚拟连接全部拆除。注意:在服务器端指定的端口的时候,要注意该端口是否可用,是否已经被占用。11023已经被系统占用了,应使用102465535之间的端口号,避免发生冲突。常用网络服务端口:技术成就梦想-贝福科技高端人才培训计划Socket客
11、户端服务器工作图技术成就梦想-贝福科技高端人才培训计划ServerSocket和Socket创建ServerSocket代表服务器端套接字。Socket代表客户端套接字。ServerSocket负责监听TCP连接请求,并为每个连接创建新的Socket实例。就是说,服务端需要同时处理ServerSocket和Socket,而客户端只需要使用Socket实例。创建ServerSocket(服务端套接字):ServerSocket(int port)创建绑定到特定端口的服务器套接字。ServerSocket(int port,int backlog)创建绑定到特定端口的服务器套接字,并指定最大连接数
12、。创建Socket(客户端套接字):Socket(InetAddress address,int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。Socket(String host,int port)创建一个流套接字并将其连接到指定主机上的指定端口号。技术成就梦想-贝福科技高端人才培训计划发送和接受流式数据为了能随时监听客户端的请求,可以使用accept()方法用来接收客户机程序的连接请求,返回值是一个Socket类型的对象。程序运行到这里处于等待状态。Socket对象创建成功后,就可以在客户机与服务器之间建立一个连接,并通过这个连接在两个端口之间传送数据。OutputS
13、tream os=socket.getOutputStream()返回此套接字的输出流,发送数据。InputStream is=socket.getInputStream()返回此套接字的输入流,接收数据。下面我们创建一个“回声”的例子:客户端向服务器端发送数据,然后服务器端返回客户端发送的数据。每一个Socket存在时都占用一定的资源,在通信完成后,应该断开服务器端或客户端上运行的应用程序,即断开其虚拟连接并释放所占用的系统资源。close()方法就能关闭当前套接字,释放资源。技术成就梦想-贝福科技高端人才培训计划创建服务器端创建服务器端public class EhcoServer Ser
14、verSocket serverSocket;private final int PORT=8888;/端口public EhcoServer()throws IOExceptionserverSocket=new ServerSocket(PORT);/创建服务器端套接字System.out.println(服务器启动。);/servic()方法public static void main(String args)throws IOException new EhcoServer().servic();/启动服务技术成就梦想-贝福科技高端人才培训计划Servicepublic void s
15、ervic()Socket socket=null;while(true)try socket=serverSocket.accept();/等待并取出用户连接,并创建套接字System.out.println(新连接,连接地址:+socket.getInetAddress()+:+socket.getPort();/客户端信息/输入流,读取客户端信息BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream();/输出流,向客户端写信息BufferedWriter bw=new Buffer
16、edWriter(new OutputStreamWriter(socket.getOutputStream();PrintWriter pw=new PrintWriter(bw,true);/装饰输出流,true,每写一行就刷新输出缓冲区,不用flushString info=null;/接收用户输入的信息while(info=br.readLine()!=null)System.out.println(info);/输出用户发送的消息pw.println(you said:+info);/向客户端返回用户发送的消息,println输出完后会自动刷新缓冲区if(info.equals(qu
17、it)/如果用户输入“quit”就退出 break;/如果客户端断开连接,则应捕获该异常,但不应中断整个while循环,使得服务器能继续与其他客户端通信 catch(IOException e)e.printStackTrace();finallyif(null!=socket)try socket.close();/断开连接 catch(IOException e)e.printStackTrace();技术成就梦想-贝福科技高端人才培训计划创建客户端创建客户端public class EhcoClient static final int PORT=8888;/连接端口static fin
18、al String HOST=192.168.0.5;/连接地址Socket socket;public EhcoClient()throws UnknownHostException,IOExceptionsocket=new Socket(HOST,PORT);/创建客户端套接字/send()方法public static void main(String args)throws UnknownHostException,IOException new EhcoClient().send();技术成就梦想-贝福科技高端人才培训计划sendpublic void send()try/客户端输
19、出流,向服务器发消息BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream();/客户端输入流,接收服务器消息BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter pw=new PrintWriter(bw,true);/装饰输出流,及时刷新Scanner in=new Scanner(System.in);/接受用户信息String msg=null
20、;while(msg=in.next()!=null)pw.println(msg);/发送给服务器端System.out.println(br.readLine();/输出服务器返回的消息if(msg.equals(quit)break;/退出 catch(IOException e)e.printStackTrace();finallyif(null!=socket)try socket.close();/断开连接 catch(IOException e)e.printStackTrace();技术成就梦想-贝福科技高端人才培训计划测试可以看到,服务器端显示客户端套接字的地址和本机一致,端
21、口为4371由操作系统随即产生的,在客户端每创建一个Socket对象,操作系统就会为客户分派一个端口。在编写Socket程序时,只需要显式的为服务器程序中的ServerSocket设置端口,客户端的端口不必关心。技术成就梦想-贝福科技高端人才培训计划扫描端口public static void main(String args)String host=192.168.0.5;/要扫描的主机int scope=1024;/要扫描的端口范围ScannerPort.scan(host,scope);/开始扫描public static void scan(String host,int scope)
22、if(scope 65535)System.out.println(端口必须在0-65536之间);return;Socket socket=null;for(int port=1;port scope;port+)try socket=new Socket(host,port);System.out.println(端口:+port+,被占用);catch(UnknownHostException e)System.out.println(主机无法识别!);catch(IOException e)System.out.println(端口:+port+不能连接!);finally if(nu
23、ll!=socket)try socket.close();catch(IOException e)e.printStackTrace();ScannerPort:技术成就梦想-贝福科技高端人才培训计划设置连接超时时间客户端的Socket在请求服务器连接时,可能需要等待一段时间,默认是一直等待永不超时,直到成功或异常。超时:由于网络延迟,网络阻塞等原因,造成服务器并未及时响应客户端的一种现象如果希望限定等待时间,则可以使用如下方式:socket=new Socket();InetSocketAddress socketAddress=new InetSocketAddress(HOST,POR
24、T);/创建Socket地址信息socket.connect(socketAddress,3000);/设置超时时间为3000毫秒当超过连接时间,仍然未能与服务器连接上时,就会抛出:.SocketTimeoutException连接超时异常。socket=new Socket();InetSocketAddress socketAddress=new InetSocketAddress(,80);socket.connect(socketAddress,1);/设为1增大超时几率技术成就梦想-贝福科技高端人才培训计划设置请求队列在服务器端监听客户连接请求时,可以设定客户端连接请求的队列长度./
25、代表创建2个队列长度的客户端请求。serverSocket=new ServerSocket(PORT,2);默认操作系统会有一个队列的长度限制,一般为50。当队列请求大于最大容量时,服务器进程会拒绝新的连接请求。只有当服务器进程通过accpt()方法从队列中取出连接请求,腾出空位,队列才能加入其它新的连接请求。注意:服务器指定的队列长度不能大于系统限定的最大长度或者小于等于0,这些情况下都会默认使用系统队列长度。技术成就梦想-贝福科技高端人才培训计划创建服务器端int port=8888;ServerSocket serverSocket;static int i=0;public MySe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java Socket 编程

限制150内