/**
 * 网咯编程入门:
 *  c/s结构:全称Client/Server结构,是指客户端和服务器结构。常见程序有qq、迅雷等如那件
 *  B/S结构:全称Browser/Server结构,是指浏览器和服务器结构,常见浏览器有谷歌、狐火等
 *
 * 网络通信协议:
 *  TCP/IP协议:
 *      应用层 HTTP FTP TFTP SMTP SNMP DNS
 *      传输层 TCP UDP
 *      网络层 ICMP IGMP IP APP RAPP
 *      数据链路层(物理层) 有底层网络定义的协议
 * 协议分类:
 *  UDP:用户数据报协议(User Datagram protocl)无连接通讯协议,耗资小,通信效率高,偶尔丢失数据包,不能保证数据完整性,
 *      特点:数据被限制在64kb以内,超出这个范围不能发送
 *  TCP:传输控制协议(Transmission Control Prtocol)TCP协议是面向连接的通信协议,传输前在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输
 *      三次握手:TCP协议中在发送数据的准备阶段,客户端与服务器之间的三次交互,以保连接可靠
 *      第一次握手:客服端向服务器端发出连接请求,等待服务器确认
 *      第二次握手:服务器端向客户端会送一个响应,通知客户端收到了连接请求
 *      第三次握手:客户端再次向服务器端发送确认信息,确认连接
 *      完成三次握手:连接建立后,客户端和服务器开始传输数据,TCP可以保证数据安全所以应用广泛
 * 网络编程三要素:
 *  协议
 *  IP地址:
 *      互联网协议地址,唯一的编号
 *      IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d的形式,例如192.168.65.100
 *          a.b.c.d都是0~255之间的十进制整数
 *      IPv4:IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分为8租十六进制数,表示为:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,解决了网络地址资源数量不够的问题
 * 常用命令:
 *  ipconfig:查看本机ip地址在控制台输出
 *  ping 空格 ip地址(ping 220.181.57.216):检查网络是否连通,在控制台输出
 *  特殊的IP地址:
 *      本机IP地址:127.0.0.1、localhost
 *  端口号:
 *      逻辑端口,无法直接看见,可以使用一些软件查看端口号
 *      当我们使用网络软件一打开,操作系统就会为网络软件分配一个端口号,或者网络软件在打开时和系统要指定的端口号
 *      端口号由两个字节组成,取值范围在0~65535之间
 *      取值注意事项:
 *          1024之前的端口号不能使用,已经被系统分配给已知的网络软件
 *          网络软件端口号不能重复
 *      常用端口号:
 *          80端口: 网络端口 www.baidu.com:80 正确的网址  www.baidu.com:70错误的端口号
 *          数据库端口号 mysql:3306 oracle:1521
 *          Tomcat服务器:8080
 *
 *  TCP通信:
 *      面向连接通信,客户端和服务器端通过三次握手才能连接,通信安全。
 *      通信的步骤:
 *          1.服务器端启动
 *          2.客户端请求服务器端
 *          3.客户端和服务器端建立逻辑连接,这个连接包含一个对象(IO对象)
 *          通信的数据不仅仅时字符,所以IO对象时字节流对象
 *      服务器端必须明确两件事:
 *          1.多个客户端同时和服务器进行交互,服务器必须明确和哪个客户端进行的交互
 *              在服务器端有个方法accept客户端获取到请求的客户端对象
 *          2.多个客户端和服务器进行交互,就需要使用多个IO流对象
 *              服务器是没有IO流的,服务器可以获取到请求的客户端对象Socket
 *              使用每个客户端Socket中提供的IO流和客户端进行交互
 *              服务器使用客户端的字节输入流读取客户端发送的数据
 *              服务器使用客户端的字节输出流给客户端回写数据
 *             简易记:服务器使用客户端的流和客户端交互
 *  1.TCP通信的客户端:
 *  向服务器发送请求,给服务器发送数据,读取服务器的回写数据
 *  java.net.Socket:此类实现客户端套接字(可以就叫"套接字")。套接字是两台计算机之间通信的端点。
 *      套接字:包含了IP地址和端口号的网络单位
 *  构造方法:
 *      Socket(String host,int port):
 *      参数:
 *          String host:服务器主机名称/服务器的IP地址
 *          int port:服务器的端口号
 *  方法:
 *      OutputStream getOutputStream():返回此套接字的输出流
 *      InputStream getInputStream():返回此套接字的输入流
 *      void close():关闭此套接字
 *  实现步骤:
 *      1.创建客户端对象Socket,构造方法绑定服务器的IP地址和端口号
 *      2.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象
 *      3.使用网络字节输出流OutputStream对象中的方法write给服务器发送数据
 *      4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
 *      5.使用网络字节输入流InputStream对象中的read读取服务器回写的数据
 *      6.释放资源(Socket)
 *  注意事项:
 *      1.客户端和服务器进行交互必须使用Socket中提供的网络流不能使用自己创建的流对象
 *      2.当创建客户端对象Socket时会去请求服务器和服务器进行三次握手建立连接通路
 *          如果服务器没有启动会抛出异常
 *          如果服务器已经启动就可以进行交互
 *  2.TCP通信的服务器端:
 *  接受客户端的请求,读取客户端的数据,给客户端回写数据
 *      java.net.ServerSocket:此类实现服务器套接字
 *  构造方法:
 *      ServerSocket(int port):创建绑定到指定端口的服务器套接字
 *  服务器明确一件事情:必须知道是哪个客户端请求的服务器
 *  所以可以使用accept方法获取到请求的客户端对象Socket
 *  成员方法:
 *      Socket accept():侦听并接受到此套接字的连接
 *  服务器实现步骤:
 *      1.创建一个服务器ServerSocket对象和系统要指定的端口号
 *      2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
 *      3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
 *      4.使用网络字节输入流InputStream对象中read方法,读取客户端发送的数据
 *      5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
 *      6.使用网路字节输出流OutputStream对象中的方法write给客户端回写数据
 *      7.释放资源(Socket,ServerSocket)
 *
 */
}

服务器

 /**  2.TCP通信的服务器端:
  *  接受客户端的请求,读取客户端的数据,给客户端回写数据
  *      java.net.ServerSocket:此类实现服务器套接字
  *  构造方法:
  *      ServerSocket(int port):创建绑定到指定端口的服务器套接字
  *  服务器明确一件事情:必须知道是哪个客户端请求的服务器
  *  所以可以使用accept方法获取到请求的客户端对象Socket
  *  成员方法:
  *      Socket accept():侦听并接受到此套接字的连接
  *  服务器实现步骤:
  *      1.创建一个服务器ServerSocket对象和系统要指定的端口号
  *      2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
  *      3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
  *      4.使用网络字节输入流InputStream对象中read方法,读取客户端发送的数据
  *      5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
  *      6.使用网路字节输出流OutputStream对象中的方法write给客户端回写数据
  *      7.释放资源(Socket,ServerSocket)
  *
  */
 class ServerSocket{

      public static void main(String[] args) throws IOException {
          //1.创建一个服务器ServerSocket对象和系统要指定的端口号
          java.net.ServerSocket serverSocket = new java.net.ServerSocket(8888);
          //2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
          Socket socket = serverSocket.accept();
          //3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
          InputStream inputStream = socket.getInputStream();
          //4.使用网络字节输入流InputStream对象中read方法,读取客户端发送的数据
          byte[] bytes = new byte[1024];
          int len = inputStream.read(bytes);
          System.out.println(new String(bytes,0,len));
          // 5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
          OutputStream outputStream = socket.getOutputStream();
          //6.使用网路字节输出流OutputStream对象中的方法write给客户端回写数据
          outputStream.write("你好客户端".getBytes());
          //7.释放资源(Socket,ServerSocket)
          socket.close();
          serverSocket.close();

      }
  }

实现:

客户端的实现:

  *  1.TCP通信的客户端:
  *  向服务器发送请求,给服务器发送数据,读取服务器的回写数据
  *  java.net.Socket:此类实现客户端套接字(可以就叫"套接字")。套接字是两台计算机之间通信的端点。
  *      套接字:包含了IP地址和端口号的网络单位
  *  构造方法:
  *      Socket(String host,int port):
  *      参数:
  *          String host:服务器主机名称/服务器的IP地址
  *          int port:服务器的端口号
  *  方法:
  *      OutputStream getOutputStream():返回此套接字的输出流
  *      InputStream getInputStream():返回此套接字的输入流
  *      void close():关闭此套接字
  *  实现步骤:
  *      1.创建客户端对象Socket,构造方法绑定服务器的IP地址和端口号
  *      2.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象
  *      3.使用网络字节输出流OutputStream都西昂中的方法write给服务器发送数据
  *      4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
  *      5.使用网络字节输入流InputStream对象中的read读取服务器回写的数据
  *      6.释放资源(Socket)
  *  注意事项:
  *      1.客户端和服务器进行交互必须使用Socket中提供的网络流不能使用自己创建的流对象
  *      2.当创建客户端对象Socket时会去请求服务器和服务器进行三次握手建立连接通路
  *          如果服务器没有启动会抛出异常
  *          如果服务器已经启动就可以进行交互
  */
 class Client{
     public static void main(String[] args) throws IOException {
         // 1.创建客户端对象Socket,构造方法绑定服务器的IP地址和端口号
         Socket socket = new Socket("127.0.0.1",8888);
         //2.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象
         OutputStream outputStream = socket.getOutputStream();
         // 3.使用网络字节输出流OutputStream对象中的方法write给服务器发送数据
         outputStream.write("你好服务器".getBytes());
         //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
         InputStream inputStream = socket.getInputStream();
         //5.使用网络字节输入流InputStream对象中的read读取服务器回写的数据
         byte[] bytes = new byte[1024];
         int len = inputStream.read(bytes);
         System.out.println(new String(bytes,0,len));
         //6.释放资源(Socket)
         socket.close();
     }
 }

java_初始网络编程的更多相关文章

  1. python网络编程

    Socket是网络编程的一个抽象的概念. 通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套 ...

  2. Windows 网络编程

    网络编程 API ,失败返回 -,错误代码 WSASYSNOTREADY 表示基础网络子系统没有准备好网络通行,WSAVERNOTSUPPORTED 表示 Socket 版本不支持,WSAEINPRO ...

  3. python高级之网络编程

    python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...

  4. C#网络编程二:Socket编程

    一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...

  5. [转]C#网络编程(基本概念和操作) - Part.1

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part1.aspx 引言 C#网络编程系列文章计划简单地讲述 ...

  6. Linux网络编程&内核学习

    c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...

  7. linux网络编程_1

    本文属于转载,稍有改动,以利于学习. (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...

  8. Linux网络编程入门 (转载)

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  9. [转] - Linux网络编程 -- 网络知识介绍

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

随机推荐

  1. 2019.7.3模拟 光影交错(穷举+概率dp)

    题目大意: 每一轮有pl的概率得到正面的牌,pd的概率得到负面的牌,1-pl-pd的概率得到无属性牌. 每一轮过后,都有p的概率结束游戏,1-p的概率开始下一轮. 问期望有多少轮后正面的牌数严格大于负 ...

  2. PHP ftp_rmdir() 函数

    定义和用法 The ftp_rmdir() 函数删除 FTP 服务器上的一个目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_rmdir(ftp_connectio ...

  3. Java高新技术第三篇:注解的使用

    我们知道注解是在JDK1.5引入的,可能有的人没有用过注解,所以感觉注解这个东西没有什么用,但是深入了解注解,对以后学习框架有所帮助的,后面提到的JavaWeb的框架中很多都是基于注解的技术, 其实注 ...

  4. tesserocr与pytesseract模块的使用

    1.tesserocr的使用 #从文件识别图像字符 In [7]: tesserocr.file_to_text('image.png') Out[7]: 'Python3WebSpider\n\n' ...

  5. NX二次开发-将工程图视图+尺寸的最大边界导出图片

    /***************************************************************************** ** ** ExportPicture.c ...

  6. xcode5 添加Build Phases脚本

    http://www.runscriptbuildphase.com/ 版权声明:本文为博主原创文章,未经博主允许不得转载.

  7. 8.RabbitMQ 消息传递Java对象

    通过消息服务器传递Java对象,Java类必须实现序列化接口,可以把Java对象转化为字节数组,从消费者或生产者传递到另外一个JVM中,一定需要两个JVM共享这个类,比如是UserInfo类.   1 ...

  8. C++之运算符重载(一元)

    一.-符号重载 1.成员函数重载负号 2.友元函数重载负号 3.补充说明 <1> <一元运算符编码实现(一)>课程笔记: A:事实上,我们的重载运算符返回void.返回对象本身 ...

  9. AtCoder ABC 131E Friendships

    题目链接:https://atcoder.jp/contests/abc131/tasks/abc131_e 题目大意 给定 N 和 K,要求构造有 N 个点,恰有 K 对点,它们的最短距离为 2 的 ...

  10. ECMAScript1.4 对象 | 简单数据类型与复杂数据类型 | 内置对象 | 基本包装类型 | String

    对象 函数和对象的区别: 函数:封装代码 对象:封装属性和方法 创建对象的方法: 1,对象字面量{} // 模拟创建一只dog var dog = { // 属性 name: 'puppy', age ...