- 浏览: 64816 次
- 性别:
- 来自: 北京
文章分类
最新评论
1. 基本Socket链接
Socket s = new Socketserver, port);
try {
InputStream inStream = s.getInputStream();
Scanner in = new Scanner(inStream);
while (in.hasNextLine()) {
String line = in.nextLine();
}
} finally {
s.close();
}
2. 服务器编写
ServerSocket s = new ServerSocket(port);
Socket incoming = s.accept();
try {
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
out.println("Hello! Enter BYE to exit.");
boolean done = false;
while (!done && in.hasNextLine()) {
String line = in.nextLine();
out.println("Echo: " + line);
if (line.trim().equals("BYE")) {
done = true;
}
}
} finally {
incoming.close();
}
3. 提供多线程访问的服务器
ServerSocket s = new ServerSocket(port);
while(true) {
Socket incoming = s.accept();
Runnable r = new ThreadedEchoHandler(incoming);
Thread t = new Thread(r);
t.start();
}
class ThreadedEchoHandler implements Runnable {
public ThreadedEchoHandler(Socket i) {
incoming = i;
}
public void run() {like up}
}
4. 发送Mail
Socket s = new Socket(mailServerName, port);
InputStream inStream = s.getInputStream();
OutputStream outStream = s.getOutputStream();
in = new Scanner(inStream);
out = new PrintWriter(outStream, true /* autoFlush */);
String hostName = InetAddress.getLocalHost().getHostName();
receive();
send("HELO " + hostName);
receive();
send("MAIL FROM: <" + from.getText() + ">");
receive();
send("RCPT TO: <" + to.getText() + ">");
receive();
send("DATA");
receive();
send(message.getText());
send(".");
receive();
s.close();
public void send(String s) throws IOException {
comm.append(s);
comm.append("\n");
out.print(s.replaceAll("\n", "\r\n"));
out.print("\r\n");
out.flush();
}
public void receive() throws IOException {
if (in.hasNextLine()) {
String line = in.nextLine();
comm.append(line);
comm.append("\n");
}
}
5. 通过URL连接获取服务器信息
URL url = new URL(urlName); //新建URL对象
URLConnection connection = url.openConnection(); //打开URL连接
connection.setRequestProperty("Authorization", "Basic " + encoding); //设置用户名和密码访问属性
connection.connect(); //开始连接
Map<String, List<String>> headers = connection.getHeaderFields(); //返回header的所有键值对
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
String key = entry.getKey(); //得到键
for (String value : entry.getValue())
System.out.println(key + ": " + value); //得到值
}
System.out.println("getContentType: " + connection.getContentType()); //获取内容类型,比如text/plain
System.out.println("getContentLength: " + connection.getContentLength()); //返回内容长度
System.out.println("getContentEncoding: " + connection.getContentEncoding()); //获取内容编码,比如gzip
System.out.println("getDate: " + connection.getDate()); //获取创建时间
System.out.println("getExpiration: " + connection.getExpiration()); //获取过期时间
System.out.println("getLastModifed: " + connection.getLastModified()); //获取最后修改时间
Scanner in = new Scanner(connection.getInputStream());
for (int n = 1; in.hasNextLine() && n <= 10; n++) //打印前10行内容
System.out.println(in.nextLine());
6. 提交表单到服务器
GET方式: 将参数附在URL结尾,空格由+来代替,但是参数长度有限制
POST方式: 通过表单进行数据提交
注意: URLEncoder具有encode(String s, String encoding)和decode(String s, String encoding)方法
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
connection.setDoOutput(true); //建立一个用于输出的连接
PrintWriter out = new PrintWriter(connection.getOutputStream()); //使用该流向服务器发信息
boolean first = true;
for (Map.Entry<String, String> pair : nameValuePairs.entrySet()) {
if (first) first = false;
else out.print('&');
String name = pair.getKey();
String value = pair.getValue();
out.print(name);
out.print('=');
out.print(URLEncoder.encode(value, "UTF-8"));
} //向输出流加入参数
out.close();
//得到返回信息
Scanner in;
StringBuilder response = new StringBuilder();
try {
in = new Scanner(connection.getInputStream());
} catch (IOException e) {
if (!(connection instanceof HttpURLConnection)) throw e;
InputStream err = ((HttpURLConnection)connection).getErrorStream();
if (err == null) throw e;
in = new Scanner(err);
}
while (in.hasNextLine()) {
response.append(in.nextLine());
response.append("\n");
}
in.close();
return response.toString();
7. 套接字超时
SocketChannel channel = SocketChannel.open(new InetSocketAddress("localhost", 8189)); //超时或者中断,会有InterrputedException抛出
8. 半关闭
当一个请求给服务器发送信息,服务器必须知道该请求什么时候结束,所以需要关闭一个套接字的输出流,来表示数据已经发送结束
Socket socket = new Socket(host, port);
Scanner in = new Scanner(socket.getInputStream());
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print(...);
writer.flush();
socket.shutdownOutput(); //关闭输出流
while (in.hasNextLine() != null) {String line = in.nextLine();} //读返回数据
socket.close(); //关闭整个socket
9. 通过主机名得到IP地址
InetAddress[] address = InetAddress.getAllByName(host); //有时主机名对应的地址不止一个,所以用数组来获取
for (InetAddress a : address) print address
InetAddress address = InetAddress.getLocalHost(); //得到本机地址,而不是127.0.0.1,而是对外的IP地址
发表评论
-
Agile Java
2009-09-21 13:48 12801. 代码就是设计 2. ... -
Effective Java
2009-09-04 11:45 8541. 考虑用静态工厂方法代替构造函数 静态工厂方法优点: ... -
Java经典实例(第二版)
2009-06-01 16:33 39741. 获取环境变量 System.getenv(" ... -
Java线程(第三版)
2009-04-03 14:09 29861. Thread生命周期 // 创建Thread ext ... -
Java编程思想(第四版) - 第22章 图形化用户界面
2009-04-03 13:14 812GUI -
Java编程思想(第四版) - 第21章 并发
2009-04-03 11:43 1054并发 -
Java编程思想(第四版) - 第20章 注解
2009-04-03 11:43 773注解 -
Java编程思想(第四版) - 第19章 枚举类型
2009-04-03 11:42 869枚举 -
Java编程思想(第四版) - 第18章 Java I/O系统
2009-04-03 11:41 843IO -
Java编程思想(第四版) - 第17章 容器深入研究
2009-04-03 11:40 880容器 -
Java编程思想(第四版) - 第16章 数组
2009-04-03 11:40 775数组 -
Java编程思想(第四版) - 第15章 泛型
2009-04-03 11:39 674泛型 -
Java编程思想(第四版) - 第14章 类型信息
2009-04-03 11:38 981类型信息 -
Java编程思想(第四版) - 第13章 字符串
2009-04-03 11:37 755字符串 -
Java编程思想(第四版) - 第12章 通过异常处理错误
2009-04-03 11:36 761异常 -
Java编程思想(第四版) - 第11章 持有对象
2009-04-03 11:31 853持有对象 -
Java编程思想(第四版) - 第10章 内部类
2009-04-03 11:30 733内部类 -
Java编程思想(第四版) - 第9章 接口
2009-04-03 11:29 713接口 -
Java编程思想(第四版) - 第8章 多态
2009-04-03 11:29 665多态 -
Java编程思想(第四版) - 第7章 复用类
2009-04-03 11:28 695复用类
相关推荐
《JAVA核心技术》是Java开发领域的经典著作,分为卷I和卷II,涵盖了Java语言的核心概念和技术。这本书深入探讨了Java编程的各种方面,是初学者和经验丰富的开发者的重要参考资料。源代码部分提供了书中示例和练习的...
针对这种情况,我们只能忽略这部分内容,而无法从这里提取与标题“java核心技术卷二”和描述“java核心技术第二卷 高级特性 提供给大家学习与交流”相关的知识点。由于缺少可读和可理解的内容,我们无法对这部分进行...
根据提供的文件信息,“Java核心技术 卷II 高级特性 原书第10版 中文版”,我们可以推测这本书主要涵盖了Java高级特性的相关内容。由于实际的书籍内容无法直接访问,我们将基于标题、描述和部分可见的内容来推断并...
《Java核心技术 卷II 高级特性》是Java开发者深入学习和掌握Java平台高级特性的经典之作,原书第9版更是集成了最新的Java技术和发展趋势。这本书详细讲解了Java编程语言的高级特性,旨在帮助程序员提升编程技能,...
《JAVA核心技术卷II源代码(第七版)》涵盖了Java编程语言的高级特性和核心概念,是深入理解Java技术体系的重要参考资料。源代码是学习过程中的实践基石,通过这些代码,我们可以深入了解Java在实际应用中的工作原理...
《Java核心技术 卷 I+卷II 第11版 最新英文版》是Java开发者不可或缺的参考书籍,由Cay S. Horstmann和Gary Cornell两位资深Java专家撰写。这套书籍全面覆盖了Java语言的基础和高级特性,对于深入理解和掌握Java编程...
Horstmann和Gary Cornell合著,是Java开发人员深入学习Java核心技术的重要参考资料。 《Core Java Volume I--Fundamentals 9th Edition》主要涵盖了Java语言的基础知识,包括: 1. **Java编程环境**:介绍如何...
不用多介绍吧,中文的,JAVA2 核心技术 卷II 高级特性 第七版
《核心Java 11版:Java核心技术 卷一卷二》是Java开发人员的重要参考资料,涵盖了从基础到高级的广泛主题。这套书籍深入讲解了Java 11版本的关键概念和技术,旨在帮助读者全面掌握Java编程。 卷一主要关注基础知识...
《Java核心技术 卷II 高级特性 第9版(中文)》是一本深入探讨Java编程高级特性的权威著作。本书涵盖了Java开发中的诸多关键概念和技术,旨在帮助Java开发者提升技能,掌握更深层次的编程知识。以下是对书中部分关键...
《Java2核心技术》是Java编程领域的一本经典著作,分为第一卷和第二卷,涵盖了Java语言的各个方面。这本书深入浅出地介绍了Java的核心概念和技术,是学习和掌握Java编程的必备参考书。以下是对这两卷内容的详细解读...
<br> 译者序 前言 第1章 多线程 第2章 集合 第3章 网络 第4章 数据库编程 第5章 分布式对象 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化...
《JAVA核心技术第二卷-原书第9版》是面向已经具备一定JAVA基础知识的学习者的一本经典教程,它深度探讨了JAVA SE7的API,并且涵盖了JAVA编程的高级特性。这本书的特点在于其清晰的目录结构和高清晰度的内容,使得...
<br> 译者序 前言 第1章 多线程 第2章 集合 第3章 网络 第4章 数据库编程 第5章 分布式对象 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化...
<br> 译者序 前言 第1章 多线程 第2章 集合 第3章 网络 第4章 数据库编程 第5章 分布式对象 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化...
JAVA 2 核心技术 卷II:高级特性第七版 中文版 part3 一共四部分,全部下载完毕解压既可。