Java核心编程八:网络编程

1 基本客户端
下面的代码实现了一个连接到服务器,并从服务器上读取一段数据的程序。
sock = new Socket(host,port);
InputStream inputStream = sock.getInputStream();
Scanner in = new Scanner(inputStream);
while(in.hasNextLine())
{
String line = in.nextLine();
System.out.println(line);
}
sock.close();

2 基本服务器
下面的代码实现了一个接受客户端发送数据并输出的程序
ServerSocket srv = new ServerSocker(port)
Socket client = srv.accept();
OutputStream os = client.getOutputStream();
os.write();
可以使用Runnable接口和Thread类来开发多线程的服务器,不在此详述

3 建立URL链接
Java类库中,URI不包含访问资源的方法,它只用来解析。URL类可以访问远程资源的数据。
RFC2396是URI的标准。URI导出了一系列接口用来获取URI各部分的内容,也用于构造复杂的URI。
URL类:
InputStream openStream()  打开一个用于读取资源数据的输入流
URLConnection openConnection()

URLConnection类:
void setDoInput(bool doInput) 如果为true,则可以接收此连接上的输入。
void setDoOutput(bool doOuput) 如果为true,则可以将输出发送到此连接。
void setIfModifiedSince(long time)  设置只获取此此时之后的数据
void setUseCaches(bool)  如果为true,则数据可以从本地缓存得到。缓存由浏览器之类外部程序提供。
void setConnectTimeout(int ms)  设置连接的超时时间ms数
void setReadTimeout(int ms)
void setRequestProperty(String key,String val)  设置请求头属性的一个字段
Map> getRequestPropertimes() 返回请求头属性的映射表。
void connect() 执行连接
Map> getHeaderFields() 获取响应的映射表。
int getContentLength() 获取内容长度
String getContentType() 获取内容类型如text/plain
long getDate() getExpiration() getLastModifed() 获取相关的时间信息
InputStream getInputStream()
OutputStream getOutputStream() 

HttpURLConnection类
InputStream getErrorStream()  返回一个流,用于读取服务器的错误信息。

URLEncoder类
static String encode(String s,String encoding) 采用字符编码模式推荐UTF-8以字符串进行编码,并返回其URL编码形式。编码后空格编码成'+',其他字符编码为%XY的形式。

URLDecoder类:
static String decode(String s,String encoding)

4 高级Socket编程
Socket类:
void connect(SocketAddress addr,int timeout)
bool isConnected()
bool isClosed()
void setSoTimeout(int ms) 设置超时ms数,超时后会抛出Timeout异常。
shutdownOutput() 采用半关闭,只关闭自己的输出。
shutdownInput()

SocketChannel类
static SocketChannel  open(InetSocketAddress addr); 在指定地址上打开一个sc。
当采用sc时,当执行线程中断时,并不会因为socket上的同步操作而阻塞,而是会抛出异常而终止。通过此机制,可以实现socket的中断。

Channels类:
static InputStream newInputStream(channel)
static OutputStream newOutputStream(channel)

5 网络地址

InetAddress类:ip地址和域名的类
InetAddress  getByName(String host)  获取域名的地址
InetAddress[] getAllByName(String)   获取域名的多个地址
InetAddress getLocalHost() 获取本地地址
byte[] getAddress()
String getHostAddress()
String getHostName()

InetSocketAddress类:IP地址+port的类(C中的sockaddr_in)
InetSocketAddress(string host,int port)
isUnresolved() 是否不能解析域名

你可能感兴趣的:(Java与Eclipse)