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网路编程的更多相关文章

  1. Java复习10.Servlet编程

    Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...

  2. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

  3. Java复习11. 单例编程

    Java复习11. 单例编程 1.最简单的写法,那个方式是线程不安全的 public class Singleton {     private static Singleton instance; ...

  4. java 复习001

    java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...

  5. Java复习8.多线程

    Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...

  6. Java复习7.输入输出流

    Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...

  7. Java复习5.面向对象

    Java 复习5面向对象知识 20131004 前言: 前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更 ...

  8. Java复习1.基本知识

    Java语言概述 20131003 开头语: 开发领域,重要的编程语言基本都是C/C++,然后就是Java, C/C++就不用说了,另外掌握Java对你是有很大的帮助的,而且也会扩宽你的择业范围.同时 ...

  9. JavaEE-实验一 Java常用工具类编程

    该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1.  使用类String类的分割split 将字符串  “Solutions to selected exercises ca ...

随机推荐

  1. tensorflowxun训练自己的数据集之从tfrecords读取数据

    当训练数据量较小时,采用直接读取文件的方式,当训练数据量非常大时,直接读取文件的方式太耗内存,这时应采用高效的读取方法,读取tfrecords文件,这其实是一种二进制文件.tensorflow为其内置 ...

  2. 对称加密与非对称加密,以及RSA的原理

    一 , 概述 在现代密码学诞生以前,就已经有很多的加密方法了.例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊.16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码.猪圈密码, ...

  3. windows下Qt5.4.2 for android开发环境配置

    安装包链接: http://yunpan.cn/cFs5tikVA83hK 访问密码 d029   本人所有的软件都安装在D:/Qt   1. 安装 Qt 5.4.2      不在讲述 2, 安装p ...

  4. zookeeper和淘宝dubbo的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用:         zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ...

  5. Python学习笔记之Centos6.9安装Python3.6

    0x00 注意 如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环 ...

  6. Django学习笔记之Models与ORM操作

    一.ORM增加 from django.db import models class Publisher(models.Model): name = models.CharField(max_leng ...

  7. 如何用纯 CSS 创作气泡填色的按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/eKqZjy 可交互视频 ...

  8. 快用Visual Studio(一)- 打开文件

    在命令行中使用Visual Studio code打开文件: 打开Visual Studio code: CMD + SHIFT + P打开控制面板: 键入"shell command&qu ...

  9. 重新想,重新看——CSS3变形,过渡与动画①

    学习CSS3,觉得最难记忆的部分除了flex特性之外,就要属变形,过渡和动画部分了.作为初学者,总有种犯懒的心理,想着既然IE8浏览器都不完全支持CSS动画属性,还要考虑浏览器兼容问题,那么就不那么着 ...

  10. SaltStack本地管理无master模式-第八篇

    Salt本地管理应用场景 1.在边缘节点服务器非常少没有Salt-master 2.零售店,电影院等弱网络环境没有Salt-master 3.快速部署单个服务没有Salt-master 实现 一,安装 ...