Presentation is loading. Please wait.

Presentation is loading. Please wait.

5.3 简单的tcp通讯 信息工程系 向模军 Tel: QQ:

Similar presentations


Presentation on theme: "5.3 简单的tcp通讯 信息工程系 向模军 Tel: QQ:"— Presentation transcript:

1 5.3 简单的tcp通讯 信息工程系 向模军 Tel: Email: QQ:

2 1 任务引入 在基于UDP的通讯模式中,通讯双方有时需要可靠的通讯(例如:文件传输)。由于UDP协议不保证通讯可靠性,因此在要求保障通讯可靠性的应用中,采用TCP协议。 TCP协议的通讯模式是客户/服务方式。服务端打开一个TCP端口监听连接,客户端与服务端建立TCP连接,并在连接期间双向传递信息。 2/12

3 2 任务讨论 客户端和服务端Socket多线程编程 3/12

4 3 套接字基本概念 在使用套接字通信过程中主动发起通信的一方被称为客户机,接受请求进行通信的一方被称为服务器。通过套接字建立连接的过程分为3个步骤: 服务器建立守护进程,负责监听每个端口(客户端)是否要求进行通信。 客户创建一个Socket对象,包括连接的主机号和端口号,指定使用的通信信息,通过发送通信请求,与服务器试图建立连接。 服务器监听到客户机的请求,创建一个Socket接受连接对象,与客户机进行通信在。 在Java网络编程中,通过创建套接字可以建立与其他机器的连接并创建套接字InuptStream和OutputStream流对象,套接字输入、输出流完全可以将连接作为一个I/O流来对待。 在使用套接字编写客户机/服务器应用程序时,建立客户机和服务器两端相互通信的过程是一样的。该过程的主要工作可归纳为以下4个方面: 打开套接字。 打开到套接字的输入、输出流。 根据服务器协议读写套接字。 通信结束前的清理。 4/12

5 3 Socket类 Socket类实现客户端的通信功能 。 构造方法:
public Socket(String host, int port) //远程服务器IP及响应端口 public Socket(InetAddress address, int port) public Socket(String host, int port, InetAddress localAddr, int localPort) public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) //在指定的机器上的指定端口上运行 Socket的输入/输出流管理 public InputStream getInputStream() public void shutdownInput() public OutputStream getOutputStream() public void shutdownOutput() 这些方法都将抛出例外IOException,程序中需要捕获处理。 关闭Socket public void close() throws IOException 5/12

6 3 ServerSocket类 构造方法: public ServerSocket(int port)
public ServerSocket(int port, int backlog) //支持指定数目的连接 public ServerSocket(int port, int backlog, InetAddress bindAddr) //在指定的机器上运行 这些方法都将抛出例外IOException,程序中需要捕获处理。 主要方法 public Socket accept():等待客户端的连接 public void close():关闭Socket 设置/获取Socket数据 public InetAddress getInetAddress()、public int getLocalPort(),… public void setSoTimeout(int timeout),… 这些方法都将抛出例外SocketException,程序中需要捕获处理。 6/12

7 3 Socket通信编程模式 无论一个Socket通信程序的功能多么齐全、程序多么复杂,其基本结构都是一样的,都包括以下四个基本步骤:
1、在客户方和服务器方创建Socket/ServerSocket实例。 2、打开连接到Socket的输入/输出流。 3、利用输入/输出流,按照一定的协议对Socket进行读/写操作。 4、关闭输入/输出流和Socket。 通常,程序员的主要工作是针对所要完成的功能在第3步进行编程,第1、2、4步对所有的通信程序来说几乎都是一样的。 7/12

8 4 任务实施 在JBuilder中新建项目。在项目中建立以下2个包(服务器端,客户端)。 服务器端:
“连接监听”tcpServer类(线程),在指定地址、端口监听客户端的连接请求,并创建Socket套接口,创建、启动tcpThread线程 。 “Socket服务”tcpThread类(线程),利用Socket套接口,负责管理与客户端的连接服务,完成客户、服务端之间的数据通信。 “服务端主程序”mainThread类,负责启动和停止tcpServer线程。 客户端: “客户端TCP管理程序” tcpclienttools类(线程),负责创建到指定地址、端口的Socket,并通过Socket发送和接受数据 。 “客户端主控程序” mainThread类,启动tcpclienttools线程 。 8/12

9 5 任务点评 Socket在调用close()方法前,应先关闭输入、输出流,即调用InputStream 和OutputStream的close()方法 。 9/12

10 6 试一试 练一练 修改tcpServer 线程,使其在关闭ServerSocket之前,强制关闭所有打开的Socket。 10/12

11 7 课外拓展 收集资料,了解TCP的工作机制及其应用环境。 11/12

12 Thank You !


Download ppt "5.3 简单的tcp通讯 信息工程系 向模军 Tel: QQ:"

Similar presentations


Ads by Google