Java复习9网路编程
Java 复习9网路编程 20131008
前言:
Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnection等等,之后面的Web开发就是Servlet开发还有各种框架等等,基本上都是基于网络编程的。在上大二的时候,自己学习过Java网络编程的知识,现在好像都忘了,再有就是JSP,Servlet等等这些编程的知识也都忘得差不多了,所以这一段时间回忆一下关于网络编程和Web编程的知识。
1.网络通信编程
TCP/IP(Transport Control Protocol / Internet Protocol) 是Internet最基本的协议。IP协议规定了数据传输的是的基本单元格式,数据包的递交办法和路由选择。TCP协议是提供的是可靠地面向对象的数据流传输服务的规则和约定。简单的说IP协议是单向的,TCP模式下,对方发送给你一个数据包,你要发送一个确认数据包给对方,这样来确认数据传输的可靠性。
2.使用URL进行网络连接
URL(Uniform Resource Loactor): 用于完整描述internet网页的和其他资源唯一标识,通常用的构造方法有:
public URL(String spec); URL url = new URL(“http://yangtengfei.duapp.com/index.php”)
public URL(URL context, String spec);
public URL(String protocol, String host, String file);
public URL(String protocol,String host, int port, String file);
使用URL获取指定的URL的数据流:
URL url = null;
try {
url = new URL("http://yangtengfei.duapp.com/index.html");
} catch (MalformedURLException e) {
e.printStackTrace();
}
System.out.println("protocol:"+url.getProtocol());
System.out.println("host:"+ url.getHost());
try {
System.out.println("content:" + url.getContent().toString());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("port:" + url.getPort());
System.out.println("file:" + url.getFile());
System.out.println("Ref: " + url.getRef());
System.out.println("UserInfo" + url.getUserInfo());
try {
url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedInputStream bis = new BufferedInputStream(url.openStream());
byte []buf = new byte[100];
int count = -1;
while((count=bis.read(buf, 0, 100)) != -1){
System.out.print(new String(buf,0,count));
}
} catch (IOException e) {
e.printStackTrace();
}
3.Socket编程
Java定义了Socket和ServerSocket两个类socket表示客户端,ServerSocket表示服务器端。
构造函数:
Socket(InetAddress address, int port [, boolean stream]);
Socket(String host,int port[, boolean stream]);
Socket(SocketImpl impl);
Socket(String host,int port,InetAddress localAddress, int localport);
Socket(InetAddress address, int port, InetAddress localAddr, int localport);
ServerSocket(int port);
ServerSocket(int port, int backlog, InetAddress binAddr/*local address*/);
Server 端编程:
ss.accept() 接受一个连接,返回一个socket,然后通过socket打开输入输出流发送数据。
Socket socket = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
socket = ss.accept();
bis = new BufferedInputStream(socket.getInputStream());
bos = new BufferedOutputStream(socket.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
当然Server段不可能只有一个客户端连接,这就需要在没接受一个连接的时候,将accept连接返回的socket作为参数触底给一个线程,让一个线程根据socket获得输入输出流,并且收发数据。同时数据流的收发建议使用Buffer缓存机制。
网络编程中少不了是数据流操作,同时还有字节流的操作,对于网络传输的数据基本上都是基于字节流的,一般不会使用字符流,所以我们在数据流操作的时候需要使用字节流而不是字节流。
字节流的操作,参看之前整理的输入输出流的笔记。
追梦的飞飞
于广州中山大学 20131008
HomePage: http://yangtengfei.duapp.com
Java复习9网路编程的更多相关文章
- Java复习10.Servlet编程
Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
- Java复习11. 单例编程
Java复习11. 单例编程 1.最简单的写法,那个方式是线程不安全的 public class Singleton { private static Singleton instance; ...
- java 复习001
java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...
- Java复习8.多线程
Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...
- Java复习7.输入输出流
Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...
- Java复习5.面向对象
Java 复习5面向对象知识 20131004 前言: 前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更 ...
- Java复习1.基本知识
Java语言概述 20131003 开头语: 开发领域,重要的编程语言基本都是C/C++,然后就是Java, C/C++就不用说了,另外掌握Java对你是有很大的帮助的,而且也会扩宽你的择业范围.同时 ...
- JavaEE-实验一 Java常用工具类编程
该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1. 使用类String类的分割split 将字符串 “Solutions to selected exercises ca ...
随机推荐
- Linux查看系统与内核信息(uname、file和lsb_release -a)
uname 命令 uname 命令可以用来查看系统与内核的相关信息,命令格式如下: [root@localhost ~]# uname [选项] 选项: -a:查看系统所有相关信息: -r:查看内核版 ...
- ABP官方文档翻译 1.5 多租户
多租户 什么是多租户? 数据库和部署架构 多部署-多数据库 单部署-多数据库 单部署-单数据库 单部署-混合数据库 多部署-单/多/混合数据库 ABP的多租户 启用多租户 租主和租户 会话 决定当前租 ...
- CentOS的Qt3和Qt4问题
在有的系统中,装有Qt3和Qt4, 在使用qmake生成Makefile后,直接make, 出错,说没有头文件, 如果调用了qt3的qmake,那么上头的INCPATH里的头文件路径也指向了Qt3, ...
- CSS 媒体类型
CSS 媒体类型 媒体类型允许你指定文件将如何在不同媒体呈现.该文件可以以不同的方式显示在屏幕上,在纸张上,或听觉浏览器等等. 一.媒体类型 一些CSS属性只设计了某些媒体.例如"voice ...
- 20145216史婧瑶《Java程序设计》第一周学习总结
20145216 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 Java平台概论 1.1 Java不只是语言 1.Java三大平台:Java SE.Java EE与Java ...
- [翻译]纠正PostCSS的4大认识误区
市面上已经有很多的前端工具,再来引入新的前端工具,价值大不大?这主要取决于,它是否给开发人员提供了新的功能,是否值得花时间和精力去学习和使用? PostCSS出现时有一个很有趣的现象.像sass和le ...
- ubuntu下wget的配置文件在哪里
答:/etc/wgetrc 这个文件里可以指定代理,如: http_proxy = http://myproxy.com:8080
- iOS日常学习 - 如何配置.gitignore文件
文章为转载学习,原文地址 为什么要配置.gitigore 在我们使用git的过程当中,不是任何文件都需要commit到本地或者远程仓库的,比如一些三方库文件. 那么作为一个git新手,很多人不知道如何 ...
- linux安装coreseek
coreseek就是一个中文词库加上sphinx组合而成的. 1.下载coreseek 下载到/usr/local/src目录文件下 wget http://www.coreseek.cn/uplo ...
- mybatis缓存有关的设置和属性
知识点:mybatis缓存相关的设置和属性 重点:每次执行增删改操作后,一二级缓存被清空,是因为标签设置默认属性为 flushCache="true" (1) <!-- 全局 ...