1. 网络基础知识

  • 两台机器之间需要进行通信,需要满足的条件:

    • 每个机器有一个唯一的标识符(IP地址);
    • 他们之间进行通信需要用同一种语言(协议);
    • 每台主机上面有多个应用程序,如QQ,微博,迅雷等,如何区别是哪个应用程序发出了请求,则需要使用不同的端口号:
      • 端口号范围为:0-65535,其中0-1023为系统所保留;
      • IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础;
      • http: 80; ftp: 21; telnet: 23
  • TCP/IP是目前世界上使用最广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族或TCP/IP协议栈
    • TCP:Tranmission Control Protocol传输控制协议
    • IP:Internet Protocol互联网协议
    • TCP/IP五层模型:
      • 一。物理层:双绞线,网卡,网线,
      • 二。数据链路层
      • 三。网络层:
      • 四。传输层:TCP/IP协议
      • 五。应用层:HTTP协议,FTP协议,SMTP协议,Telnet远程登录服务等
  • Java对网络编程的支持:
    • InetAddress类:用于标识网络上的硬件资源。
    • URL类:统一资源定位符,通过URL可以直接读取或写入网络上的数据。

    • Sockets:使用TCP协议实现网络通信的Socket相关的类
    • Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信。

2. InetAddress类:用于标识网络上的硬件资源,表示互联网(IP地址)。

  • 查看Java API得到InetAddress类的方法信息:无构造函数,但是可以通过getByName("主机名/IP地址")返回InetAdress对象;

3. URL类:统一资源定位符(即网址),通过URL可以直接读取或写入网络上的数据。

  • 由两部分组成:协议名称和资源名称,中间一冒号隔开,如http://www.baidu.com,分别表示http协议和资源名称
  • 使用:多看API
  • public static void main(String[] args) {
    //创建一个URL的实例
    try {
    URL imooc = new URL("http://www.imooc.com");
    //?后面表示参数,#后面表示锚点
    URL url = new URL(imooc, "/index.html?username=tom#test");
    System.out.println("protocol: " + url.getProtocol());
    System.out.println("host: " + url.getHost());
    //如果未指定端口号,则使用默认的端口号,此时getPort()方法的返回值为-1
    System.out.println("port: " + url.getPort());
    System.out.println("path: " + url.getPath());
    System.out.println("file: " + url.getFile());
    System.out.println("Ref: " + url.getRef());
    System.out.println("DefaultPort: " + url.getDefaultPort());
    System.out.println("query: " + url.getQuery());
    try {
    System.out.println("content: " + url.getContent());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
  • 使用URL读取网页内容:通过URL对象的openStream()方法可以得到指定资源的输入流

4. Socket通信

  • TCP协议是面向连接的,可靠的,有序的,以字节流的方式发送数据
  • 基于TCP协议实现网络通信的类
    • 客户端的Socket类
    • 服务器端的ServerSocket类
    • 实现步骤:
      • 创建ServerSocket和Socket
      • 打开连接到Socket的输入/输出流
      • 按照协议对Socket进行读/写操作
      • 关闭输入输出流,关闭Socket

4. TCP编程

  • 描述:实现用户的登录。实质就是客户端想服务器端发送信息(用户名和密码),服务器端进行响应。
  • 服务器端:
    • 创建ServerSocket对象,绑定监听端口;
    • 通过accept()方法监听客户端请求;
    • 连接建立后,通过输入流读取客户端发送的请求信息;
    • 通过输出流向客户端发送响应信息;
    • 关闭相应的资源。
  • 客户端:
    • 创建Socket对象,指明需要连接的服务器的地址和端口号;
    • 连接建立后,通过输出流向服务器端发送请求信息;
    • 通过输入流获取服务器响应的信息;
    • 关闭相应的资源。
  • 多线程服务器
    • 应用多线程实现服务器与多客户端之间的通信,基本步骤如下:

      • 服务器端创建ServerSocket,循环调用accept()等待客户端连接
      • 客户端创建一个socket并请求和服务器连接
      • 服务器端接收客户端请求,创建socket与该客户建立专线连接
      • 建立连接的两个socket在一个单独的线程上对话
      • 服务器端继续等待新的连接

5. UDP编程

  • 描述:UDP连接是无连接的,不可靠的连接。
  • DatagramPacket:表示数据报包;DatagramSocket:进行端到端的通信
  • 服务器端步骤:
    • 创建DatagramSocket,指定端口号
    • 创建DatagramPacket
    • 接收客户端发送的数据信息
    • 读取数据
  • 客户端步骤:
    • 定义发送信息
    • 创建DatagramPacket,包含将要发送的信息
    • 创建DatagramSocket
    • 发送数据

6. 注意

  • 设置多线程的优先级
  • 是否关闭输出和输入流:对于同一个socket,如果关闭了输出流,则与该输出流关联的socket也会被关闭,所以一般不用关闭流,直接关闭socket即可。
  • 使用TCP通信传输对象,通过字符串的形式进行交互,更多的应该是使用对象的方式,可以将它封装成User对象:ObjectOutputStream流。
  • Socket编程传递文件。

Java——Socket编程(一)的更多相关文章

  1. Java Socket编程题库

    一.    填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...

  2. Java Socket编程(转)

    Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...

  3. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

  4. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

  5. 多线程Java Socket编程示例

    package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...

  6. 转:Java Socket编程

    对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...

  7. Java Socket编程基础篇

    原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Sock ...

  8. Java Socket编程详细解说

    Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是So ...

  9. Java Socket编程如何建立两者关系

    转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...

  10. 20182332 实验四《Java Socket编程 》实验报告

    20182332 实验肆<数据结构与面向对象程序设计>实验报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 盛国榕 学号:20182332 实验教师:王志强 实验日 ...

随机推荐

  1. Android利用数据库传送数据

    ---恢复内容开始--- 一.建表 //通过SQLiteDatabase 创建数据库stu.db3 final SQLiteDatabase db = SQLiteDatabase.openOrCre ...

  2. 使用 Delphi Xe 的 TDictionary

    原本一直使用 TList, 将定义的一个个 Record 保存在TList 里面, 为了能把某些对象管理起来, 例如一个类的 n 多实例,可以进行索引.查找.释放等 今天刚看到原来已经有了一个叫 TD ...

  3. spring命名空间不需要版本号

    为什么dubbo启动没有问题? 这篇blog源于一个疑问: 我们公司使了阿里的dubbo,但是阿里的开源网站http://code.alibabatech.com,挂掉有好几个月了,为什么我们的应用启 ...

  4. Redis整合Spring结合使用缓存实例

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的 ...

  5. Android推送方案分析(MQTT/XMPP/GCM)

    本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案. 方案1. 使用GCM服务(Google Cloud ...

  6. 荒木毬菜 小情歌日文版 - 独身OL之歌

    咎(とが)めるつもりもないけどtogameru tumorimo naikedo并不想责备在身旁 暇(ひま)してる时间(じかん)をhimashiteru jikan wo无所事事的时间 パジャマの鸟( ...

  7. 如何修改ECShop发货单查询显示个数

    使用ecshop的朋友都知道,商城首页调用的发货单查询,默认显示的10个.很多朋友想修改它的数量,可是在后台管理却找不到相应的地方,这个修改和显示排行榜的数量修改方法不一样.排行榜是可以在后台修改的, ...

  8. CSS3 功能

    1.  CSS3在css2的基础上增加了很多功能,ie8以下的浏览器有可能不支持某些属性,增加了很多圆角.渐变.旋转.阴影等效果 2.  文本修饰 text-decoration 属性用来设置或删除文 ...

  9. [ios][opengles]GLKit如何搭一个app的框架

    一个外文对GLKit的讲解: Beginning OpenGL ES 2.0 with GLKit Part 1    英文原文链接:http://www.raywenderlich.com/5223 ...

  10. Linux hrtimer分析(一)

    http://blog.csdn.net/angle_birds/article/details/17375883 本文分析了Linux2.6.29中hrtimer的实现. Linux2.6中实现了一 ...