1.协议的概念:通信双方事先约定好的通信规则

2七层网络通信协议;应用成,表示层,会话层,传输层,网络层,数据链路层

3.TCP/IP协议:点对点通信,三层握手,安全有保证

4。UDP协议;广播协议,不保证数据安全但很高效

5.重要APl:InetAddress类,URl类,ServerSocked类,DatagramSocket类

6.网络编程主要有两部分:一是获取管理socket连接,二是获取使用输入输出流传输数据

1.网络模型介绍

OSI参考模型                   TCP/IP参考模型

应用层                              应用层

表示层

会话层

传输层                               传输层

网络层                               Internet层

数据链路层

物理层                                网络接口层

TCP/IP协议组

HTTP FTP SMIP DNS RPC SNM

TCP                       UDP

RARP  IP              IGMP ICMP

以太网   令牌环             帧中  ATM

网络通讯要素:IP地址,端口号,传输协议

2.网络通讯要素1-IP地址

ip计算机唯一标识

端口号每台计算机应用程序的隔离

传输协议:通讯的规则

IP地址;网络中设备的标识

ip不方便记忆,使用主机名

本地回环地址;127.0.0.1 主机名localhost

2的10次方,小于255

IP也是一个类java.net下的InetAddress

里面没有构造函数,不能通过new来创建对象

3.网络通讯要素2-端口

端口号;用于标识进程的逻辑地址

有效端口0~65535,其中0~1024被系统使用或保留端口

某一个数据传给某一个进程,

能上网不能聊QQ,通过防火墙软件,把QQ相应数据传输端口被禁用了,就不能 发送和接收信息了

端口号是进程的唯一标识,如果QQ和飞秋是同一个端口,可以同时接收到一个信息

4.网络通讯要素3-传输协议

通讯的规则

常见协议TCP.UDP

传输层:TCP 和UDP

UDP

不需要建立连接,将数据及源和目的封装到数据包中,不需要源和目的进行连接

每个数据包的大小限制在64kb

因无连接,是不可靠协议:咱们发送的数据不知道对方是否接受到

不需要建立连接,效率相对快

TCP

建立连接,形成传输数据的通道

在连接中进行大数据量的传输,没有限制,基于通道,任意发送

通过三次握手完成确认连接,是可靠协议。连接已经建立,通话可靠,确认通道连接正常

必须建立连接,效率会降低

5. Socket(套接字)

Socket就是为网络服务提供的一种机制

通信的两端都有Socket

网络通讯其实就是Socket通信

数据在两个Socket件传输,数据传输IO流

网络编程步骤(Socket编程)

客户端

建立网络连接(指定iP地址和端口号),建立Socket服务,基于Socket服务器进行数据传输

交换数据(请求响应模型)

关闭连接,释放资源

服务器端

监听端口,当客户端发送数据时,有端口进行接收

获得连接(被动),等待客户端连接

交换数据,基于客户端请求,创建Socket服务

关闭连接

6. UDP发送端开发

发送端

1.建立UDP的Socket服务

DatagramSocket socket=new DatagramSocket();

2.封装数据包

byte[] data="开始UDP之旅".getByte();

DatagramPacket packet=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);

3.通过socket的send()发送数据

socket.send(packet);

4.关闭资源

socket.close();

7. UDP接收端开发

接收端

1.建立udp的socket服务器,必须指定端口

DatagramSocket socket=new DatagramSocket(10000);

2. 定义数据包用于接收数据

byte[] data=new byte[1024];

DatagramPacket packet=socket.receive(buf,buf.length)

3.通过socket的receive()方法,把数据接收到packet包中

socket.receive(packet);

4.通过packet的相应方法获取数据

packet.getData(); getAddress();...

String content=new String(packet.getData(),0.packet.length)

5.关闭资源

socket.close();

8. UDP聊天程序开发

UDP发送端

// 1. 创建udp的Socket服务,可指定端口,可不指定,开通一个任意的执行端口
  DatagramSocket socket = new DatagramSocket();// 不需要指定端口,因为只需要一个端口把数据发送出去就行
  // 2.提供相应的发送信息,封装数据包,自己构造包,某个ip和端口上(字节数组,ip,端口)
  // 2.1动态发送数据,可以通过一个服务多次发送,多次接收
  Scanner scanner = new Scanner(System.in);// 键盘录入是system.in
  while (scanner.hasNext()) {// 判断是否录入结束
   byte[] data = scanner.nextLine().getBytes();// 字节数组
   DatagramPacket packet = new DatagramPacket(data, data.length,
     InetAddress.getLocalHost(), 888);
   // 3.调用Socket服务的发送方法send,进行信息的发送
   socket.send(packet);
  }

UDP接收端

// 1.创建socket服务,必须指定端口和发送端相同的端口,发送主机相同的端口
  DatagramSocket socket = new DatagramSocket(888);
  // 2.构建datagramPacket ,用于接收数据
  byte[] data = new byte[1024];// 缓冲区
  DatagramPacket packet = new DatagramPacket(data, data.length);// 只需要有数据就行
  // 3.通过socket的receive方法,将数据封装到packet中
  while (true) {
   socket.receive(packet);// 该方法是阻塞方法// 把包以参数,10000端口监听到的信息,封装给包
   // 4.通过packet提供的相应方法,获取客户端发送的相应信息
   // InetAddress ip = packet.getAddress();
   // System.out.println(ip.getHostAddress());
   String content = new String(packet.getData(), 0, packet.getLength());// 返回字节数组
   System.out.println(content);
  }

首先运行接收端,然后运行接收端

9. TCP客户端开发

客户端

1. 建立TCP客户端socketfuw

Socket socket=new Socket(192.168.1.161,10001);

2.通过socket的getOutputStream()获得流对象

OutputStream out=socket.getOutputStream();

3.通过流对象的操作方法传输数据

byte[] data="开始春游".getByte();

out.write(data);

4.关闭资源

socket.close();

提前建立连接,在客户端和服务器端创建socket服务

tcp和udp编程的不同

1. 使用的封装API不一样

2.IP和端口号,udp是写到包里的,不用写在socket服务中

tcp是写到socket服务中,和服务器端建立连接

3. udp使用的是包,tcp使用的是流

输出是write,输入read

10 TCP服务器端开发

服务端

1. 建立TCP服务端socket服务

ServerSocket ss=new ServerSocket(10001);

2.通过ss的accept()获得客户端对象

Socket socket=ss.accept();

3.通过socket获取读取流,读取客户端发送的数据

InputStream in=socket.getInputStream();

4.通过流对象操作数据

byte[] buf=new byte[1024];

int len=in.read(buf);

5.关闭资源

socket.close();

ss.close();

11。TCP服务端和客户端的相互通讯

服务端回写信息

// 还可以回写信息,客户端和服务器端相互通信
  OutputStream out = socket.getOutputStream();
  // byte[] data = "可以".getBytes();
  out.write("收到收到".getBytes());

客户端接收信息

// 接收服务器端数据
  InputStream in = socket.getInputStream();
  byte[] buf = new byte[1024];
  int len = in.read(buf);
  System.out.println(new String(buf, 0, len));

12.智能聊天机器人客户端开发

Java 基础高级2 网络编程的更多相关文章

  1. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  2. Java基础教程:网络编程

    Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...

  3. java基础学习总结——网络编程

    一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程.

  4. JAVA基础知识之网络编程——-网络通信模型(IO模型)

    <Unix网络编程:卷1>中介绍了5中I/O模型,JAVA作为运行在宿主机上的程序,底层也遵循这5中I/O模型规则.这5中I/O模型分别是: 阻塞式IO 非阻塞式IO I/O复用 信号驱动 ...

  5. java 基础之--nio 网络编程

    在传统的Java 网络编程中,对于客户端的每次连接,对于服务器来说,都要创建一个新的线程与客户端进行通讯,这种频繁的线程的创建,对于服务器来说,是一种巨大的损耗,在Java 1.4 引入Java ni ...

  6. 【java基础学习】网络编程

    网络编程 InetAddress tcp udp

  7. 【Java基础总结】网络编程

    网络编程 InetAddress tcp udp

  8. JAVA基础知识之网络编程——-使用Proxy创建连接

    在前面的HTTP网络通信的例子中,使用了URLConnection conn = url.openConnection();连接网络, 如果改用URLConnection conn = url.ope ...

  9. JAVA基础知识之网络编程——-使用MutilcastSocket实现多点广播

    IP多点广播原理 设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看作一个组,当客户需要发送和接受信息时,加入到该组即可. IP协议为多点广播提供了一批特殊的IP地址,范围是224.0.0 ...

随机推荐

  1. A*算法

    A*在游戏设计中有它很典型的用法,是人工智能在游戏中的代表. A*算法在人工智能中是一种典型的启发式搜索算法,为了说清楚 A*算法,我看还是先说说何谓启发式算法. 一.何谓启发式搜索算法: 在说它之前 ...

  2. 基于bootstrap样式的tree,

    <!doctype html><html lang="zh"><head> <meta charset="UTF-8" ...

  3. Linq 单表城市级联

    var list = (from province in db.Areas && province.IsDel == join city in db.Areas on province ...

  4. 如何利用git由本机向github上传文件

    首先,下载一个git,安装. 安装成功之后,输入以下命令,引号内的为你自己的名字和邮箱git config --global user.name "Your Name"git co ...

  5. Kinect2.0 for Mac开箱

    前段时间从米国带回来一个Kinect,坑爹地发现需要适配器才能连接电脑.于是又从微软官网下单了适配器.今天终于在Mac上把Kinect装起来跑了,与大家分享一点图片. Kinect驱动安装 Kinec ...

  6. 架构师养成记--15.Disruptor并发框架

    一.概述 disruptor对于处理并发任务很擅长,曾有人测过,一个线程里1s内可以处理六百万个订单,性能相当感人. 这个框架的结构大概是:数据生产端 --> 缓存 --> 消费端 缓存中 ...

  7. centos在线安装svn

    centos在线安装svn 用下列命令安装svn服务 yum install subversion 创建svn版本库目录 mkdir -p /var/svn/svnrepos 创建版本库 svnadm ...

  8. 清北 Noip 2016 考前刷题冲刺济南班

    2016 10 29 周六 第一天 %%%,%ZHX大神 上午,60分, 下午,爆零orz 2016 10 30 周天 第二天 炒鸡倒霉的一天 %%%,%ZHX大神 据大神第一天的题最简单. 上午,和 ...

  9. 11 Set和Map数据结构

    Set和Map数据结构 Set WeakSet Map WeakMap 首先 这四个对象都是 数据结构. 用于存放数据 Set 类似数组. 但是不能重复. 如果你有重复数据,会自动忽略 属性 size ...

  10. QT下调试基于ros的catkin项目

    1.首先告诉qt ros的搜索路径,通过修改qt creator 桌面启动程序来实现 sudo    gedit ~/.local/share/applications/DigiaQtOpenSour ...