第4章基于TCP协议的Socket通信。

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果ServerSocket关闭后,仍然有发向它的数据,操作系统 并不会立刻关闭它所绑定的端口,等接收完数据后,再关 闭端口。如果此时立刻在同一个主机上重启服务器程序, 由于端口被占用,服务器启动失败抛出BindException。
应用程序
① 创建Socket
②通过bind将 Socket信息通 知给网络驱动层
④从socket中将数据读出 Socket
③ 网络驱动层将网络中与 Socket对应的数据接收并放 入到Socket中
网络驱动层
5
与Socket相关的类
相关类在java.net包中 ServerSocket类位于服务器端的TCP通信 Socket类位于服务器端和客户端的TCP通信 DatagramSocket类支持UDP通信协议
boolean isBound()
判断服务器是否曾经与端口成功绑定过。
10
用telnet验证TCP协议的服务器端程序
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆 服务的标准协议和主要方式。它为用户提供了在本地计算机 上完成远程主机工作的能力。
telnet程序位于本机 C:\Windwos\System32目录中。
void setSoTimeout(int timeout) throws SocketException
int getSoTimeout() throws IOException
用于设置服务器等待客户连接的超时时间。默认为0, 一直等待下去。如果超过了超时时间,服务器端抛出
SocketTimeoutException。
码头A
货物
货物具体如何运送交 给货运公司
货物
码头B
3
Socket数据发送过程
应用程序
① 创建Socket
②通过bind将 Socket信息通 知给网络驱动层
③将要发送的数据 写入到socket中
Socket
④网络驱动层从Socket中 取出数据通过网卡发送出去
网络驱动层
4
Socket数据接收过程
个端口(匿名端口)。
public ServerSocket(int port, int backlog)
创建服务器套接字并将其绑定到指定的本地端口号。 backlog表示服务器忙时所指定的最大等待连接数。
public ServerSocket(int port, int backlog, InetAddress bindAddr)
6
TCP网络程序通信模型
为客户端1 创建Socket
客户端 Socket1
①向服务器发送请求
服务器端 ServerSocket
客户端 Socket2
为客户端2 创建Socket
7
ServerSocket
public ServerSocket(int port)
创建绑定到特定端口的服务器套接字。 如果port为0,由操作系统分配一
InetAddress getInetAddress() throws SocketException
返回此服务器套接字的本地地址
int getLocalPort() throws SocketException
返回此套接字的监听端口
boolean isClosed() 只有执行了close(),此方法才返回true。
远程登录的命令格式: telnet IP地址 端口号
见源文件:tcp\ServerSocketTest.java
11
用telnet验证TCP协议的服务器端程序
在本地计算机上使用telnet功能, 首先按下图方式 将telnet功能打开。
设置ServerSocket的选项
(1) SO_TIMEOUT
ObjectOutputStream ObjectInputStream 传递文件
2
4. 一些注意事项
套接字(Socket)
Socket是网络驱动层提供给应用程序编程的接口和一 种数据发送、接收机制。Socket由应用程序创建, 与网络驱动层建立绑定机制,告诉网络驱动层当前 应用程序所对应的IP地址和端口号。
见源文件:ServerSocket选项设置/Timwk.baidu.comOutTest.java
13
设置ServerSocket的选项
(2) SO_REUSEADDR
void setReuseAddress(boolean on) throws SocketException
boolean getReuseAddress() throws IOException
9
ServerSocket的主要方法
Socket accept() throws SocketException
监听并接受客户端到此套接字的连接请求,并为客户端的请 求创建一个与之对应的Socket对象 。
void close() throws SocketException
释放ServerSocket占用的端口,断开与所有客户端的连接。
无参构造方法的主要用途是:允许服务器在绑定到特定端 口之前,先设置ServerSocket的选项,因为一旦服务器与 端口绑定,就不能设置ServerSocket的选项了。
ServerSocket serverSocket=new ServerSocket(); serverSocket.setReuseAddress(true); serverSocket.bind(new InetSocketAddress(9000));
基于TCP协议的Socket通信
本章内容
1. Socket的基本概念及通信过程 2. 服务器端Socket程序的编写
ServerSocket的构造方法及主要方法 利用telnet验证服务器程序的正确性 ServerSocket一些重要选项的设置 3. 客户端Socket程序的编写
Socket的构造方法和主要方法 服务器与客户端的一对一通信 服务器与客户端的一对多通信 在服务器端采用线程池 Socket一些重要选项的设置 在服务器与客户端之间传递对象
bindAddr表示套接字所绑定的计算机IP地址,此构造方法适合一台计算机有多 个网卡的情况。
注意:这些构造方法都将抛出例外IOException。
8
ServerSocket
public ServerSocket()
此方法创建的Socket不与任何本地端口绑定,需要通过调 用bind()方法与特定端口绑定。
相关文档
最新文档