Java 技术 网络编程  ---- 广州科苑 彭之军
本次讲座内容大纲 <ul><li>Java Socket 简介 </li></ul><ul><li>Socket 入门实例 一次简单的对话 </li></ul><ul><li>一对多的 Socket 通信 </li></ul>
Socket <ul><li>网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个 Socket 。 </li></ul><ul><li>Socket 通常用来实现客户方和服务方的连接。 Socket 是 TCP/I...
通讯示意图
<ul><li>使用 Socket 进行 Client/Server 程序设计的一般连接过程是这样的: Server 端 Listen( 监听 ) 某个端口是否有连接请求, Client 端向 Server 端发出 Connect( 连接 ) ...
Socket 类结构 <ul><li>对于一个功能齐全的 Socket ,都要包含以下基本结构,其工作过程包含以下四个基本的步骤: </li></ul><ul><li>  ( 1 ) 创建 Socket ; </li></ul><ul><li>...
Socket 和 serverSocket <ul><li>Socket 和 ServerSocket 类库位于 java.net 包中。 </li></ul><ul><li>ServerSocket 用于服务器端, Socket 是建立网络连...
重要的 Socket API : <ul><li>java.net.Socket 继承于 java.lang.Object ,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见 JDK 文档。 </li></ul><u...
重要的 Socket API : <ul><li>2)getInputStream() 方法获得网络连接输入,同时返回一个 IutputStream 对象实例。 </li></ul><ul><li>3)getOutputStream() 方法连...
为了便于读 / 写数据,我们可以在返回的输入 / 输出流对象上建立过滤流,如 DataInputStream 、 DataOutputStream 或 PrintStream 类对象,对于文本方式流对象,可以采用 InputStreamRead...
<ul><li>例如: </li></ul><ul><li>PrintStream os=new PrintStream(new BufferedOutputStreem(socket.getOutputStream())); </li></u...
关闭 Socket <ul><li>每一个 Socket 存在时,都将占用一定的资源,在 Socket 对象使用完毕时,要其关闭。在关闭 Socket 之前,应将与 Socket 相关的所有的输入 / 输出流全部关闭,以释放所有的资源。而且要注...
服务器端的代码 ServerSocket server =new ServerSocket(5005); socket= server.accept(); System.out.println(&quot; 服务已连接 ---&quot;); ...
客户端核心代码 <ul><li>socket=new Socket(&quot;127.0.0.1&quot;,5005);// 指定连接地址和端口 </li></ul><ul><li>is =socket.getInputStream(); ...
谢谢! <ul><li>QQ: 20035699 </li></ul><ul><li>博客地址: http://blog.csdn.net/atixujie </li></ul><ul><li>其它代码示例将放于 FTP 公用账户下 </li>...
Thank you
Upcoming SlideShare
Loading in …5
×

Java技术讲座 网络编程

1,249 views
1,108 views

Published on

java i/o socket thread

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,249
On SlideShare
0
From Embeds
0
Number of Embeds
99
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java技术讲座 网络编程

  1. 1. Java 技术 网络编程 ---- 广州科苑 彭之军
  2. 2. 本次讲座内容大纲 <ul><li>Java Socket 简介 </li></ul><ul><li>Socket 入门实例 一次简单的对话 </li></ul><ul><li>一对多的 Socket 通信 </li></ul>
  3. 3. Socket <ul><li>网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个 Socket 。 </li></ul><ul><li>Socket 通常用来实现客户方和服务方的连接。 Socket 是 TCP/IP 协议的一个十分流行的编程界面,一个 Socket 由一个 IP 地址和一个端口号唯一确定。 </li></ul>
  4. 4. 通讯示意图
  5. 5. <ul><li>使用 Socket 进行 Client/Server 程序设计的一般连接过程是这样的: Server 端 Listen( 监听 ) 某个端口是否有连接请求, Client 端向 Server 端发出 Connect( 连接 ) 请求, Server 端向 Client 端发回 Accept (接受)消息。一个连接就建立起来了。 Server 端和 Client 端都可以通过 Send , Write 等方法与对方通信。 </li></ul>
  6. 6. Socket 类结构 <ul><li>对于一个功能齐全的 Socket ,都要包含以下基本结构,其工作过程包含以下四个基本的步骤: </li></ul><ul><li>  ( 1 ) 创建 Socket ; </li></ul><ul><li>  ( 2 ) 打开连接到 Socket 的输入 / 出流; </li></ul><ul><li>  ( 3 ) 按照一定的协议对 Socket 进行读 / 写操作; </li></ul><ul><li>  ( 4 ) 关闭 Socket. </li></ul><ul><li>第三步是程序员用来调用 Socket 和实现程序功能的关键步骤,其他三步在各种程序中基本相同 。 </li></ul>
  7. 7. Socket 和 serverSocket <ul><li>Socket 和 ServerSocket 类库位于 java.net 包中。 </li></ul><ul><li>ServerSocket 用于服务器端, Socket 是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个 Socket 实例,操作这个实例,完成所需的会话。 </li></ul><ul><li>对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。 </li></ul>
  8. 8. 重要的 Socket API : <ul><li>java.net.Socket 继承于 java.lang.Object ,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见 JDK 文档。 </li></ul><ul><li>1) accept() 方法用于产生 &quot; 阻塞 &quot; ,直到接受到一个连接,并且返回一个客户端的 Socket 对象实例。 &quot; 阻塞 &quot; 是一个术语,它使程序运行暂时 &quot; 停留 &quot; 在这个地方,直到一个会话产生,然后程序继续 . </li></ul>
  9. 9. 重要的 Socket API : <ul><li>2)getInputStream() 方法获得网络连接输入,同时返回一个 IutputStream 对象实例。 </li></ul><ul><li>3)getOutputStream() 方法连接的另一端将得到输入,同时返回一个 OutputStream 对象实例。 其中 getInputStream 和 getOutputStream 方法均会产生一个 IOException ,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。 </li></ul>
  10. 10. 为了便于读 / 写数据,我们可以在返回的输入 / 输出流对象上建立过滤流,如 DataInputStream 、 DataOutputStream 或 PrintStream 类对象,对于文本方式流对象,可以采用 InputStreamReader 和 OutputStreamWriter 、 PrintWirter 等处理。
  11. 11. <ul><li>例如: </li></ul><ul><li>PrintStream os=new PrintStream(new BufferedOutputStreem(socket.getOutputStream())); </li></ul><ul><li>DataInputStream is=new DataInputStream(socket.getInputStream()); </li></ul><ul><li>PrintWriter out=new PrintWriter(socket.getOutStream(),true); </li></ul><ul><li>BufferedReader in=new ButfferedReader(new InputSteramReader(Socket.getInputStream())); </li></ul>
  12. 12. 关闭 Socket <ul><li>每一个 Socket 存在时,都将占用一定的资源,在 Socket 对象使用完毕时,要其关闭。在关闭 Socket 之前,应将与 Socket 相关的所有的输入 / 输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与 Socket 相关的所有的输入 / 输出该首先关闭,然后再关闭 Socket 。 </li></ul><ul><li>   os.close(); </li></ul><ul><li>   is.close(); </li></ul><ul><li>   socket.close(); </li></ul>
  13. 13. 服务器端的代码 ServerSocket server =new ServerSocket(5005); socket= server.accept(); System.out.println(&quot; 服务已连接 ---&quot;); is =socket.getInputStream(); os=socket.getOutputStream(); br=new BufferedReader(new InputStreamReader(is)); os.write(&quot;welcome&quot;.getBytes());// 发送给客户端 os.flush(); String said=br.readLine();// 可以一次读取一行,读取客户端发来的消息 System.out.println(&quot;client said:&quot;+said);
  14. 14. 客户端核心代码 <ul><li>socket=new Socket(&quot;127.0.0.1&quot;,5005);// 指定连接地址和端口 </li></ul><ul><li>is =socket.getInputStream(); </li></ul><ul><li>os=socket.getOutputStream(); </li></ul><ul><li>bw=new BufferedWriter(new OutputStreamWriter(os)); </li></ul><ul><li>byte[] b =new byte[1024]; </li></ul><ul><li>int len=is.read(b); </li></ul><ul><li>String s =new String(b,0,len); </li></ul><ul><li>System.out.println(&quot; 服务器说: &quot;+s); </li></ul><ul><li>bw.write(&quot;hello&quot;); </li></ul><ul><li>bw.flush(); </li></ul>
  15. 15. 谢谢! <ul><li>QQ: 20035699 </li></ul><ul><li>博客地址: http://blog.csdn.net/atixujie </li></ul><ul><li>其它代码示例将放于 FTP 公用账户下 </li></ul>
  16. 16. Thank you

×