- 浏览: 62303 次
- 性别:
- 来自: 北京
文章分类
最新评论
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 12451. 代码就是设计 2. ... -
Effective Java
2009-09-04 11:45 8241. 考虑用静态工厂方法代替构造函数 静态工厂方法优点: ... -
Java经典实例(第二版)
2009-06-01 16:33 39431. 获取环境变量 System.getenv(" ... -
Java线程(第三版)
2009-04-03 14:09 29561. Thread生命周期 // 创建Thread ext ... -
Java编程思想(第四版) - 第22章 图形化用户界面
2009-04-03 13:14 784GUI -
Java编程思想(第四版) - 第21章 并发
2009-04-03 11:43 985并发 -
Java编程思想(第四版) - 第20章 注解
2009-04-03 11:43 717注解 -
Java编程思想(第四版) - 第19章 枚举类型
2009-04-03 11:42 839枚举 -
Java编程思想(第四版) - 第18章 Java I/O系统
2009-04-03 11:41 761IO -
Java编程思想(第四版) - 第17章 容器深入研究
2009-04-03 11:40 839容器 -
Java编程思想(第四版) - 第16章 数组
2009-04-03 11:40 720数组 -
Java编程思想(第四版) - 第15章 泛型
2009-04-03 11:39 630泛型 -
Java编程思想(第四版) - 第14章 类型信息
2009-04-03 11:38 926类型信息 -
Java编程思想(第四版) - 第13章 字符串
2009-04-03 11:37 696字符串 -
Java编程思想(第四版) - 第12章 通过异常处理错误
2009-04-03 11:36 716异常 -
Java编程思想(第四版) - 第11章 持有对象
2009-04-03 11:31 803持有对象 -
Java编程思想(第四版) - 第10章 内部类
2009-04-03 11:30 679内部类 -
Java编程思想(第四版) - 第9章 接口
2009-04-03 11:29 684接口 -
Java编程思想(第四版) - 第8章 多态
2009-04-03 11:29 614多态 -
Java编程思想(第四版) - 第7章 复用类
2009-04-03 11:28 634复用类
相关推荐
不用多介绍吧,中文的,JAVA2 核心技术 卷II 高级特性 第七版
<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章 国际化...
<br> 译者序 前言 第1章 多线程 第2章 集合 第3章 网络 第4章 数据库编程 第5章 分布式对象 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化...
JAVA 2 核心技术 卷II:高级特性第七版 中文版 part3 一共四部分,全部下载完毕解压既可。
JAVA2 核心技术 卷II 中文第八版 共分为5卷。 另外第一版也已上传,也分为5卷 没分数了,哈哈,大家捐点。
Preface About This Book Conventions Chapter 1: The Java SE 8 Stream Library Chapter 2: Input and Output Chapter 3: XML
java核心编程第8版第二卷。chm原版,非扫描版。因上传大小限制,分割为5个文件上传。解压方法:将《Core Java. Volume II. Advanced Features, 8th Edition.part1.rar》、《Core Java. Volume II. Advanced Features...
一共分3部分,此为第一部分,其他部分可以点击我的用户名,在我的提供的资源列表... 有关XML处理、网络、数据库、本地方法、安全、高级AWT/Swing和其他高级特性请参阅《Java核心技术,卷Ⅱ:高级特性(原书第8版)》。
java 核心技术 第八版 core 卷1 Core Java, 8th Edition Core Java. Volume I. Fundamentals, 8th Edition Core Java. Volume II. Advanced Features, 8th Edition 官方网站 http://horstmann.com/corejava.html ...
本人珍藏的书籍:JAVA.2核心技术.卷II:高级特性7th/JAVA2核心技术第1卷.基础知识7th/-Java设计模式(第2版)中文版/JAVA设计模式。 类型是pdf版的。
本书是经典的《Java核心技术,卷II:高级特性》的最新修订版,涵盖了Java SE6平台的高级用户界面程序设计和企业特性。与第1卷(涵盖了核心的语言和类库特性)一样,本卷已经更新到了JavaSE6。并且对新内容都作了重点...
Java核心技术-卷I+卷II(第9版) 中文高清 + 源码,由于文件过大,因此压缩文件分为四部分,这是第三部分,其余部分请去我的资源查找,资源名称类似:Java核心技术-卷I+卷II(第9版) 中文高清 + 源码 .part4。
Java2核心技术II卷.高级特性 目录: 译者序 前言 第1章 多线程 1.1 什么是线程 1.2 中断线程 1.3 线程状态 1.4 线程属性 1.5 同步 1.6 阻塞队列 1.7 线程安全的集合 1.8 Callable和Future 1.9 执行器 ...
Multithreading Chapter 2. Collections Chapter 3. Networking Chapter 4. Database Connectivity: JDBC Chapter 5. Remote Objects Chapter 6. Advanced Swing Chapter 7. Advanced AWT Chapter 8. JavaBeans&#...
本书是经典的《Java核心技术,卷II:高级特性》的最新修订版,涵盖了Java SE6平台的高级用户界面程序设计和企业特性。与第1卷(涵盖了核心的语言和类库特性)一样,本卷已经更新到了JavaSE6。并且对新内容都作了重点...
java核心编程第8版第二卷。chm原版,非扫描版。因上传大小限制,分割为5个文件上传。解压方法:将《Core Java. Volume II. Advanced Features, 8th Edition.part1.rar》、《Core Java. Volume II. Advanced Features...
java核心编程第8版第二卷。chm原版,非扫描版。因上传大小限制,分割为5个文件上传。part1及part2各需下载资源分1分,part3~part5不需要资源分,所以总共需要2资源分。解压方法:将《Core Java. Volume II. ...