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

More Related Content

PPT
Ibatis技术讲座
PPTX
La trattoria
PPTX
Art omnia 210510
PDF
Air on Android
PPT
Presentació1
PPT
Africa 1999 - 2004
PDF
Post ero
PPT
Lysu's Java Socket notes
Ibatis技术讲座
La trattoria
Art omnia 210510
Air on Android
Presentació1
Africa 1999 - 2004
Post ero
Lysu's Java Socket notes

Similar to Java技术讲座 网络编程 (12)

PPT
高性能并发网络服务器设计与实现
PPTX
Unix socket
PPT
Flash网络通讯处理 陈苏俊
PDF
[圣思园][Java SE]Network
PPT
高性能并发Web服务器实现核心内幕
PPT
Analysis on tcp ip protocol stack
PDF
Hdfs写流程异常处理
PPT
Real-Time Web实时信息流推送
PPT
Real time web实时信息流推送
PPTX
Introduction of netty
PPTX
实时Web的前世今生未来
PPTX
Web并发模型粗浅探讨v3
高性能并发网络服务器设计与实现
Unix socket
Flash网络通讯处理 陈苏俊
[圣思园][Java SE]Network
高性能并发Web服务器实现核心内幕
Analysis on tcp ip protocol stack
Hdfs写流程异常处理
Real-Time Web实时信息流推送
Real time web实时信息流推送
Introduction of netty
实时Web的前世今生未来
Web并发模型粗浅探讨v3
Ad

Java技术讲座 网络编程

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