java-网络编程篇《八》

1.TCP/IP协议

在Internet中TCP/IP协议是使用最广泛的通讯协议。“传输控制协议/网际协议”/Transmission Control Protocol/Internet Protocol

  • TCP/IP实际上是一组协议,它包括上百个各种功能的协议。如:“远程登录”,“文件传输”等,而
  • TCP协议和IP协议只是保证数据完整传输的两个重要协议。通常说TCP/IP是internet协议族,而
  • 不单单只是指TCP协议和IP协议。
  • TCP/IP协议的基本传输单位是数据包(datagram).

2.TCP协议

TCP(transmission control protocol)传输控制协议。

  • 是专门设计用于在不可靠的因特网上提供可靠的,端到端的字节流通信协议。
  • 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。
  • TCP将包排序并进行错误检查,同时实现虚电路间的连接(通过三路握手实现)。
  • TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

TCP是一种面向连接的通信协议,TCP连接提供两台计算机之间可靠无差错的字节流数据传输。

3.IP地址和端口号

IP地址:网络中每台计算机的一个标识符,是一个逻辑地址。127.0.0.1代表本机地址。

端口号:具有网络功能的应用软件的标识符。

  • 端口号总共有2的16次方个(65536),0-1023是公认端口号,
  • 1024-65535是还没有定义的端口号,用户可以自己使用
  • 端口与协议有关:TCP和UDP的端口互不相干。

4.IP地址

IP地址是使用32位(4个字节)二进制表示。一般用十进制显示如:182.168.1.3。

IP地址分类:5类,A类:给政府机构用。B类:给中等规模公司用。C类:给有任何需要的人用

D类:用于组播。E类:用于实验。

在实际中可以使用127.0.0.1表示本机(本机IP地址或回路地址),或者直接使用localhost代表本机。

ping 127.0.0.1 是用来测试网卡是否正常。

后三位都为0的和后三位都为255的不在其中,另有他用。

4.1 域名

http://www.sina.com.cn   域名
  http:协议
  www:www组织
  sina:主机名
  com;商业  net :非盈利组织 org:政府,edu:教育
  cn:中国

5.Socket套接字

  • 两个应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket。
  • Socket可以看成在两个程序在进行通讯连接中的一个端点,一个程序将一段信息写入一个Socket中,
  • 该Socket将这段信息发送给另一个Socket中,使这段信息能传送到其他程序中。
  • Socket通常用来实现client-server连接,建立连接需要的寻址信息为IP和端口号(Port Number)。

6.网络编程的四个基本步骤

  • 创建Socket;
  • 打开链接到Socket的输入/输出流;
  • 按照一定的协议对Socket进行读/写操作;
  • 关闭Socket;

演示Demo

public class TCPServer  //Server端
{
    public  static void main (String []args)
    {
      try{
       ServerSocket ss=new ServerSocket (8888);//建立服务端
       while(true)
        {
           Socket s1=ss.accept();//返回Socket端
          BufferedWriter bw=new BufferedWriter   //建立写入流;
              (new OutputStreamWriter(s1.getOutputStream()));
              //向写入流写入内容
              bw.write("你好"+s1.getInetAddress()+":"+s1.getPort());
              //关闭资源
              bw.close();
              s1.close();
        }
      }catch (Exception e)
        {
      
        }
 }} 
public class TCPClient //客户端
{
    public static void main (String []args)
    {
       try{
              Socket s=new Socket ("127.0.0.1",8888);
              BufferedReader br=new BufferedReader (new InputStreamReader(s.getInputStream()));
              System.out.println("服务器说:"+br.readLine());
              br.close();
              s.close();
       }catch (Exception e)
        {
       
       }
 }}

7.TCP Socket通信模型

java.net包中定义了两个类:Socket和ServerSocket ,分别用来实现TCP的Client和Server端

7.1 TCP/IP中的协议

  • UDP(User Datagram Protocol)用户数据报协议
  • UDP和TCP位于同一层(传输层),但它对数据包的顺序错误和重发没有TCP来的可靠。因此,UDP不被应用
  • 于那些使用虚电路的面向直接服务,UDP主要用于面向查询-应答的服务。
  • UDP是一种面向无连接(只发送无需建立连接)的通信协议,UDP向应用程序提供一种发送封装的原始IP数据报
  • 的方法,并且发生时无需建立连接,不保证可靠数据的传输。

8.UDP网络编程

  • 面向无连接的数据传输,不可靠,效率高。常用于音频,视频...
  • UDP一次发送的数据不能超过64KB。

UDP编程所需要的类。

DatagramSocket 此类表示用来发送和接收数据报包的套接字

DatagramSocket (int port) ;//创建本地主机的指定端口

DatagramSocket (int port ,InetAddress laddr) ;//

DatagramPacket 此类表示数据报包。(多个包发送时会选择不同的路由发送,且按不同的顺序到达)

DatagramPacket (byte[] buf,int length,InetAddress address,int port);

DatagramPacket(byte[] buf,int length,SocketAddress address);

InetAddress类。

static InetAddress getByName(String host);//静态方法,其没有构造方法

//eg: InetAddress ia=InetAddress.getByName("192.168.1.1");返回一个指定iP的对象。

SocketAddress是抽象类,其实现的子类为InetSocketAddress。

构造方法:

InetSocketAddress (InetAddress addr,int port);

InetSocketAddress (int port);//创建套接字地址,其中IP地址为通配符地址。

InetSocketAddress (String hostname,int port);//hostname为IP地址

发送端: 1:建立DatagramSocket,(此socket端口随机)。

2:建立DatagramPacket,(指定发送地址的ip和端口)。

3:使用socket的send方法发送。

4:关闭资源

接收端:1:建立DatagramSocket,(监听的端口为发送端packet的指定端口)。

2:建立DatagramPacket,(无需指定ip和端口)。

3:使用socket的receive方法接收。

4:关闭资源

发送端代码:

import java.io.IOException ;
import java.net.*;
//发送端
public class UDPSender
{
    public static void main (String[]args)
    {
      String str="你好吗!";
      DatagramSocket ds=null;
      DatagramPacket dp=null;
      try{
          //定义一个发送包的socket ,端口使用9999
          ds=new DatagramSocket(9999);
          //要发送的数据包,一定要指定ip和port
          String ip="127.0.0.1";
          byte[]buf=str.getBytes();
          dp=new DatagramPacket (buf,buf.length,InetAddress.getByName(ip),8888);
          //发送数据
          ds.send(dp);
      }catch(Exception e)
       {}
      finally{
           if(ds!=null)
               ds.close();
      }
     }
}
//接收端
public class UDPReceiver 
{
    public static void main (String []args)
    {
       byte[]buf=new byte[1024];
       DatagramSocket ds=null;
       DatagramPacket dp=null;
       try{
           //在8888端口监听并接受数据包
           ds=new DatagramSocket("8888");
           dp=new DatagramPacket(buf,buf.length);
           while(true)
           {
           //收数据--此方法在接收到数据报前一直阻塞
           ds.receive(dp);
           //dp.getLength();得到dp里的有效数据的长度
           System.out.println(new String (buf,0,dp.getLength()));
           }

       }catch(Exception e)
        {}
       finally
        {
          if(ds!=null)
              ds.close();
        }
    }    
}
时间: 2024-10-05 04:02:11

java-网络编程篇《八》的相关文章

第13篇-JAVA 网络编程

第13篇-JAVA 网络编程 每篇一句 比我强大的人都在努力我还有什么理由不拼命 初学心得 不去追逐你所渴求你将永远不会拥有 (笔者JEEP/711)[JAVA笔记 | 时间:2017-04-22| JAVA 网络编程 ] 1.网络编程基本概念 1.什么是计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路连接起来在网络操作系统网络管理软件及网络通讯协议的管理和协调下实现资源共享和信息传递的计算机系统 把分布在不同地理区域的计算机与专门的外部设备用通讯线路互

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

20145311实验四 "Java网络编程及安全"

20145311实验四 "Java网络编程及安全" 程序设计过程 实验内容 ·掌握Socket程序的编写:·掌握密码技术的使用:·设计安全传输系统 ·利用加解密代码包,编译运行代码,一人加密,一人解密:·集成代码,一人加密后通过TCP发送: 实验步骤 在这之前进行了一个socket连接的例子:用百度做了个实验 下面是两人合作进行RSA的加密: 首先建立一个Socket对象,用来连接特定服务器的指定端口(我负责的是服务器端,郑凯杰负责的是客户端,所以也就是输入我这边的ip地址),输入的参

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

【Java】Java网络编程菜鸟进阶:TCP和套接字入门

Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)这两个数据传输协议的支持.本文开始探讨 TCP. TCP 基础知识 在“服务器-客户端”这种架构中,服务器和客户端各自维护一个端点,两个端点需要通过网络进行数据交换.TCP 为这种需求提供了一种可靠的流式连接,流式的意思是传出和收到的数据都是连续的字节,没有对数据量进行大小限制.

Java 网络编程(Elliotte Rusty Harold)

最近看了本Java网络编程方面的书,系统化一下Java网络编程,主要内容如下: 1.网络基础篇 这里包括基础的网络概念/ 输入输出流BIO/ Internet地址/URI/URL/HTTP/URLConnection 2.多线程篇 这里包括线程池/线程调度/死锁/同步 3.Socket篇 这里包括客户端Socket/服务端Socket/UDP Socket(IP组播) 4.NIO篇 这里包括缓冲区/通道/就绪选择 总结知识树

Java网络编程从入门到精通(4):DNS缓存

在通过DNS查找域名的过程中,可能会经过多台中间DNS服务器才能找到指定的域名,因此,在DNS服务器上查找域名是非常昂贵的操作.在Java中为了缓解这个问题,提供了DNS缓存.当InetAddress类第一次使用某个域名(如www.csdn.net)创建InetAddress对象后,JVM就会将这个域名和它从DNS上获得的信息(如IP地址)都保存在DNS缓存中.当下一次InetAddress类再使用这个域名时,就直接从DNS缓存里获得所需的信息,而无需再访问DNS服务器. DNS缓存在默认时将永

【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的

一.简介 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明白为什么Retrofit那么屌.最近也看了一些其源码分析的文章以及亲自查看了源码,发现其对Java网络编程及HTTP权威指南有了一个很好的诠释.一直以来,都信奉一个原则,在这个新技术日新月异的时代,如何在Java界立足,凭借的就两点: 1.基本功,包括:Java基本知识,(Java编程思想.Effective Java),Java进阶(Java虚拟机.Java设计模式).网络相关(这个时

Java网络编程和NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型

Java网络编程与NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型 知识点 nio 下 I/O 阻塞与非阻塞实现 SocketChannel 介绍 I/O 多路复用的原理 事件选择器与 SocketChannel 的关系 事件监听类型 字节缓冲 ByteBuffer 数据结构 场景 接着上一篇中的站点访问问题,如果我们需要并发访问10个不同的网站,我们该如何处理? 在上一篇中,我们使用了java.net.socket类来实现了这样的需求,以一线程处理一连接的方式,并配以线程池的控制

用java网络编程中的TCP方式上传文本文件及出现的小问题

自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文件给服务端,服务端接收数据并显示“上传成功”给客户端. 客户端: 1 import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.io.IOException; 4 import java.io.InputStr