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. android studio 使用jar包,arr包和怎么使用githup开源项目中的aar包或module

    我这里的android studio的版本是2.2.3版本 一.现在大家都用android studio了,就有人问怎么使用jar包 其实使用jar包比较简单 直接吧jar放入工程的app目录下的li ...

  2. MyBatis中collection (一对一,一对多)

    MyBatis学习:http://www.mybatis.org/mybatis-3/zh/index.html 大对象InsuranceDetailsVO: com.quicksure.mobile ...

  3. 【BZOJ 4580】【Usaco2016 Open】248

    http://www.lydsy.com/JudgeOnline/problem.php?id=4580 区间dp,f(i,j)表示区间[i,j]全部合成一个数,这个数是多少. 可以归纳证明[i,j] ...

  4. delphi 实现最小化系统托盘

    1.new -->application 2.在form1中加入一个tPopMenu 命名为pm1 3.uses ShellAPI; 4.定义一个常量在 const WM_TRAYMSG = W ...

  5. js中类型识别的方法

    第一种方法typeof typeof是一种运算符,它的值有以下几种 <!DOCTYPE html> <html lang="en"> <head> ...

  6. CSS-学习笔记三

    绝对定位:1. 脱离了文档流,没有浮动效果2. 默认情况下,设置了绝对定位的块,它的Top,left是相对于浏览器的3. 当给设置了绝对定位的块的父元素设置定位的时候(绝对.相对.固定),    那么 ...

  7. thinkphp缓存

    最简答的缓存 // 缓存设置 public function ff(){ S('); } // 缓存读取 public function aa(){ $value = S('name'); echo ...

  8. Request.Form接收不到post数据.

    Request.Form接收不到post数据. https://q.cnblogs.com/q/62635/ Content-Type 有没有设置为 application/x-www-form-ur ...

  9. 深入理解Java中的String

    一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...

  10. C语言基础(10)-数组

    一.数组的定义 数组就是在内存中连续的相同类型的变量空间. 二.数组在内存中的存储方式 同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的,数组名是一个地址的常量,代表数组中 ...