17.3 基于TCP协议的网络编程
2015-09-23 15:57
267 查看
17.3.1 TCP协议基础
IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议。
17.3.2 使用ServerSocket创建TCP服务器
在两个通信实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接收来自其他通信实体的连接请求。
Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端Socket连接,如果没有连接,它将一直处于等待状态。
ServerSocket包含一个监听来自客户端连接请求的方法。
◆Socket accpet():如果接收到一个客户端Socket的连接请求,该方法将返回一个与客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞。
◆ServerSocket(int port):用指定的端口port来创建一个ServerSocket。该端口应该有一个有效的端口整数值,即0~65535。
◆ServerSocket(int port, int backlog):增加一个用来改变连接队列长度的参数backlog。
◆ServerSocket(int port, int backlog, IntetAddress localAddr):在机器存在多个IP地址的情况下,允许通过localAddr参数来指定将ServerSocket绑定到指定的IP地址。
当ServerSocket使用完毕后,应使用ServerSocket的close()方法来关闭该ServerSocket。在通常情况下,服务器不应该只接收一个客户端请求,而应该不断地接收来自客户端的所有请求,所以Java程序通常会通过循环不断地调用ServerSocket的accept()方法。如下代码片段所示。
上面程序中创建ServerSocket没有指定IP地址,则该ServerSocket将会绑定到本机默认的IP地址。程序中使用30000作为该ServerSocket的端口号,通常推荐使用1024以上的端口,主要是为了避免与其他应用程序的通用端口冲突。
17.3.3 使用Socket进行通信
客户端通常可使用Socket的构造器来连接到指定服务器,Socket通常可使用如下两个构造器:
◆Socket(InetAddress/String remoteAddress, int port):创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统动态指定的IP地址。
◆Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort)::创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口号,适用于本地主机有多个IP地址的情形。
上面两个构造器中指定远程主机时既可使用InetAddress来指定,也可直接使用String对象来指定,但程序通常使用String对象(如192.168.1.1)来指定远程IP地址。当本地主机只有一个IP地址时,使用第一个方法更为简单。如下代码所示。
IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议。
17.3.2 使用ServerSocket创建TCP服务器
在两个通信实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接收来自其他通信实体的连接请求。
Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端Socket连接,如果没有连接,它将一直处于等待状态。
ServerSocket包含一个监听来自客户端连接请求的方法。
◆Socket accpet():如果接收到一个客户端Socket的连接请求,该方法将返回一个与客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞。
◆ServerSocket(int port):用指定的端口port来创建一个ServerSocket。该端口应该有一个有效的端口整数值,即0~65535。
◆ServerSocket(int port, int backlog):增加一个用来改变连接队列长度的参数backlog。
◆ServerSocket(int port, int backlog, IntetAddress localAddr):在机器存在多个IP地址的情况下,允许通过localAddr参数来指定将ServerSocket绑定到指定的IP地址。
当ServerSocket使用完毕后,应使用ServerSocket的close()方法来关闭该ServerSocket。在通常情况下,服务器不应该只接收一个客户端请求,而应该不断地接收来自客户端的所有请求,所以Java程序通常会通过循环不断地调用ServerSocket的accept()方法。如下代码片段所示。
//创建一个ServerSocket,用于监听客户端Socket的连接请求 ServerSocket ss = new ServerSocket(30000); //采用循环不断地接收来自客户端的请求 while(true) { //每当接收到客户端Socket的请求时,服务器也对应产生一个Socket Socket s = ss.accept(); //下面就可以使用Socket进行通信了 ... }提示:
上面程序中创建ServerSocket没有指定IP地址,则该ServerSocket将会绑定到本机默认的IP地址。程序中使用30000作为该ServerSocket的端口号,通常推荐使用1024以上的端口,主要是为了避免与其他应用程序的通用端口冲突。
17.3.3 使用Socket进行通信
客户端通常可使用Socket的构造器来连接到指定服务器,Socket通常可使用如下两个构造器:
◆Socket(InetAddress/String remoteAddress, int port):创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统动态指定的IP地址。
◆Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort)::创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口号,适用于本地主机有多个IP地址的情形。
上面两个构造器中指定远程主机时既可使用InetAddress来指定,也可直接使用String对象来指定,但程序通常使用String对象(如192.168.1.1)来指定远程IP地址。当本地主机只有一个IP地址时,使用第一个方法更为简单。如下代码所示。
//创建连接到本机、30000端口的Socket Socket s = new Socket("127.0.0.1", 30000); //下面就可以使用Socket进行通信 ...
相关文章推荐
- javaEE__http协议
- TCP/IP 邮件(四)
- 通用js函数集锦<来源于网络/自己> 【一】
- http各种中的各种timeout
- 高德地图API采用沃通SSL证书实现https加密
- 浅谈 Linux 内核开发之网络设备驱动
- 网络子系统在链路层的收发过程剖析
- 网络协议(一)
- ubuntu Apache2 如何 设置 HTTPS
- win8+centos环境下s3c2410通过网络下载程序
- Nginx 的 TCP 负载均衡介绍
- iOS开发网络篇—搭建本地服务器
- iOS开发网络篇—HTTP协议
- 网络编程释疑之:同步,异步,阻塞,非阻塞
- iOS9 HTTP 不能正常使用的解决办法
- IP头、TCP头、UDP头详解以及定义
- Java使用HttpURLConnection检索网站时403错误处理方式
- TCP 滑动窗口的简介
- System.Web.Http.GlobalConfiguration 并不包含“Configure”的定义
- content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" 详解