《深入剖析Tomcat》一1.2 Socket类

1.2 Socket类

套接字是网络连接的端点。套接字使应用程序可以从网络中读取数据,可以向网络中写入数据。不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的。为了从一个应用程序向另一个应用程序发送消息,需要知道另一个应用程序中套接字的IP地址和端口号。在Java中,套接字由java.net.Socket表示。
要创建一个套接字,可以使用Socket类中众多构造函数中的一个。其中一个构造函数接收两个参数:主机名和端口号。

public Socket (java.lang.String host, int port)

其中参数host是远程主机的名称或IP地址,参数port是连接远程应用程序的端口号。例如,想要通过80端口连接yahoo.com,可以使用下面的语句创建Socket对象:

new Socket ("yahoo.com", 80);

一旦成功地创建了Socket类的实例,就可以使用该实例发送或接收字节流。要发送字节流,需要调用Socket类的getOutputStream()方法获取一个java.io.OutputStream对象。要发送文本到远程应用程序,通常需要使用返回的OutputStream对象创建一个java.io.PrintWriter对象。若想要从连接的另一端接收字节流,需要调用Socket类的getInputStream()方法,该法会返回一个java.io.InputStream对象。
下面的代码段创建了一个套接字,用于与本地HTTP服务器进行通信(127.0.0.1 表示一个本地主机),发送HTTP请求,接收服务器的响应信息。以下代码创建了一个StringBuffer对象来保存响应信息,并将其输出到控制台上。

注意 为了从Web服务器上获取正确的响应信息,需要发送一个遵循HTTP协议的HTTP请求。如果你已经阅读了前一节中关于HTTP的描述,你应该已经可以理解以上代码中关于发送HTTP请求的方法。
注意 可以使用本书中的com.brainysoftware.pyrmont.util.HttpSniffer类来发送HTTP请求,并显示响应信息。要使用该Java程序,需要连接到Internet。但是,要注意的是,防火墙可能会使程序失败。
ServerSocket类
Socket类表示一个客户端套接字,即,当想要连接到远程服务器应用程序时创建的套接字。但如果你想要实现一个服务器应用程序(例如一个HTTP服务器或FTP服务器),你需要另一种方法。因为服务器必须时刻待命,它并不知道客户端应用程序会在什么时候发起连接。正因如此,需要使用java.net.ServerSocket类,这是服务器套接字的实现。
ServerSocket类与Socket类并不相同。服务器套接字要等待来自客户端的连接请求。当服务器套接字收到了连接请求后,它会创建一个Socket实例来处理与客户端的通信。
要创建一个服务器套接字,可以使用ServerSocket类提供的4个构造函数中的任意一个。需要指明IP地址和服务器套接字侦听的端口号。典型情况下,IP地址可以是127.0.0.1,即服务器套接字会侦听本地机器接收到的连接请求。服务器套接字侦听的IP地址称为绑定地址。服务器套接字的另一个重要属性是backlog,后者表示在服务器拒绝接收传入的请求之前,传入的连接请求的最大队列长度。
ServerSocket类的其中一个构造函数的签名如下:

public ServerSocket(int port, int backLog, InetAddress bindingAddress);

值得注意的是,在这个构造函数中,参数绑定地址必须是java.net.InetAddress.类的实例。创建InetAddress对象的一种简单方法是调用其静态方法getByName(),传入包含主机名的字符串,代码如下所示:

InetAddress.getByName("127.0.0.1");

下面的一行代码创建了一个ServerSocket对象,ServerSocket对象侦听本地主机的8080端口,其backlog值为1:

new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));

创建了ServerSocket实例后,可以使其等待传入的连接请求,该连接请求会通过服务器套接字侦听的端口上绑定地址传入。这些工作可以通过调用ServerSocket类的accept方法完成。只有当接收到连接请求后,该方法才会返回,其返回值是一个Socket实例。然后,就正如1.2节所述,可以使用该Socket对象与客户端应用程序进行字节流的发送/接收。实际上,在本章的应用程序中,accept是唯一会使用到的方法。

时间: 2024-08-03 21:57:27

《深入剖析Tomcat》一1.2 Socket类的相关文章

《深入剖析Tomcat》一3.1 StringManager类

3.1 StringManager类 像Tomcat这样的大型应用程序必须小心仔细地处理错误消息.在Tomcat中,错误消息对系统管理员和servlet程序员来说都是很有用的.例如,系统管理员可以很容易地根据Tomcat的错误日志消息定位到发生异常的位置.而对于servlet程序员来说,在抛出的每个javax.servlet.servletException异常中,Tomcat都会发送一条特殊的错误消息,这样,程序员就可以知道servlet程序到底哪里出错了.Tomcat处理错误消息的方法是将错

《深入剖析Tomcat》一导读

前 言 欢迎阅读本书.本书剖析了Tomcat 4.1.12版本和Tomcat 5.0.18版本的基本结构,并解释了其servlet容器Catalina的内部工作原理.Catalina是开源.免费的,也是最受欢迎的servlet容器之一.Tomcat本身是一个复杂的系统,包含了许多不同的组件.若你想学习Tomcat的工作方式,应该从了解这些组件开始.本书描述Tomcat的总体结构,并针对每个组件建立一个简单的版本,使你更好地理解组件的工作机制,之后对真实组件进行描述."本书结构"一节会对

socket系列之客户端socket——Socket类

假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含很多方法用于建立连接,操作数据流等.客户端按以下几步进行工作:① 创建一个Socket实例,构造函数直接指定远程服务器IP跟端口,建立一个TCP连接.② 通过这个Socket实例的输入输出流进行通信,Socket实例都包含一个InputStream对象和OutputStream对象,通过操作这些流就

通过java.net.Socket类抓取网页内容

网页 通过 java.net.Socket 类访问一个Web页面,并且返回结果 import java.io.*; import java.net.*; public class FirstSocket { public static void main(String args[]) { //判断参数是否为两个,正确的用法为 FirstSocket 网站 页面 if(args.length!=2) { System.out.println("Usage : FirstSocket host pa

通过java.net.Socket 类抓取网页内容

网页 /** 文件名 : FirstSocket.java 描述 :通过 java.net.Socket 类访问一个Web页面,并且返回结果 作者: 慈勤强 cqq1978@yeah.net 参考:http://java.sun.com **/ import java.io.*;import java.net.*; public class FirstSocket{ public static void main(String args[]) { //判断参数是否为两个,正确的用法为 First

用Socket类构建网页下载器

网页|下载 用Socket类构建网页下载器 屠恩海(SunHai) 开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP 什么时候用到Socket类 Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序.所谓"分层",可以视为包含3个层次:请求/响应层.应用协议

Socket类中提供的支持异步操作的方法

在网络编程中运用Socket,常常需要长期监听某个端口,以获得Socket连接,进而执行相关操作. 但此时,主线程就会被阻塞,无法做其他事情.为了解决这类问题,Socket类中提供了一些支持异步操作的方法,如表17-10所示. 表17-10 Socket类中支持异步操作的方法 方法 说明 BeginAccept() 开始一个异步请求,以创建一个新的Socket对象来接受传入的连接请求 EndAccept() 结束一个异步请求,以创建一个新的Socket对象来接受传入的连接请求 BeginConn

Java语言的Socket类

当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数.两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字.对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有IP

用Socket类实现HTTP协议客户端应用

Http客户端程序已集成在Java语言中,可以通过URLConnection类调用.遗憾的是,由于SUN没有公布Http客户程序的源码,它实现的细节仍是一个谜.本文根据HTTP协议规范,用Java.net.Socket类实现一个HTTP协议客户端程序. 1.Socket类: 了解TCP/IP协议集通信的读者知道,协议间的通信是通过Socket完成的.在Java.net包中,Socket类就是对Socket的具体实现.它通过连接到主机后,返回一个I/O流,实现协议间的信息交换. 2 . HTTP协