Java 网络通信基础讲解

计算机通信:
1) 通信的协议:
由于计算机通信的过程是非常的不可靠(物理不可靠),需要依靠软件来设计协议,包装数据能正确,顺序的传递到目标电脑。
OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
这里写图片描述
2) 通信双方地址 :
IP地址: (相当于身份证上的姓名(可更改))
IPv4:32位2进制,为了记忆方便:点分十进制。192.168.13.56 ,2^32个地址。地址远远不够分。
1.子网掩码 ( 对iP地址进行网络分割 )
2.直接升级ip地址的位数。
IPv6:128位:8组表示地址 每组使用16位来表示的,展示形式是16进制。
Mac地址:物理地址,网卡地址:是生产网卡就固化的。(相当于身份证上的身份证号(不可更改))
一台计算机中可能有多个程序需要接受数据。如果需要找到计算机准确的某个程序接受数据,则需要端口号来进行程序的标志和区分。
端口:
端口号默认是2^16个(0~65535)。不能出现两个程序对同一个端口进行获取或传递数据。
如果端口在1024以下:是系统端口,建议打开并且不能被自己的程序占用。
通信的两端:【IP地址,端口】
端口:标识正在计算机上运行的进程(程序)
网络通信的三要素:协议+IP地址+端口号。
3)网络套接字:
端口号与IP地址的组合得出一个网络套接字 Socket。
java中网络编程的步骤:
1#TCP编程
2#UDP编程
所涉及的类:
如何表示地址 :InetAddress

package cn.com.hwadee;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Socket01 {

    public static void main(String[] args) throws UnknownHostException {
    InetAddress address=InetAddress.getByName("主机名称");
    String hostAddress = address.getHostAddress();
    String hostName = address.getHostName();
    System.out.println(hostAddress);
    System.out.println(hostName);
    }

}

如何表示通信的两端:socket
如果表示TcP的服务器:SocketServer

客户端:

package cn.com.hwadee;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        InetAddress address = InetAddress.getByName("主机名称");
        int port = 10001;
        Socket s = new Socket(address, port);
        OutputStream outputStream = s.getOutputStream();
        String s1 = "大家好";
        outputStream.write(s1.getBytes());
        s.close();
    }

}

服务器:

package cn.com.hwadee;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        ServerSocket ss=new ServerSocket(10001);
        Socket accept = ss.accept();

        InputStream inputStream = accept.getInputStream();
        byte [] b=new byte[1024*1];
        int len = inputStream.read(b);

        String content=new String(b,0,len);

        System.out.println("服务端收到来自客户端的消息---> "+content);

        //ss.close();

    }

}

如果表示UDP的Socket:DatagramSocket DatagramPacket

进行send操作:

package cn.com.hwadee;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class Send {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        DatagramSocket ds = new DatagramSocket();
        String s = "大家好";
        byte[] bytes = s.getBytes();
        int length = bytes.length;
        InetAddress address = InetAddress.getByName("PC-C-12");
        DatagramPacket dp = new DatagramPacket(bytes, length, address, 10001);
        ds.send(dp);
        ds.close();
    }

}

进行receive操作(由于接收端(类似于服务器)一般不会关闭,在此例子中没有进行ds.close();)

package cn.com.hwadee;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Receive {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        DatagramSocket ds = new DatagramSocket(10001);
        byte[] b = new byte[1024];
        int length = b.length;
        DatagramPacket dp=new DatagramPacket(b, length);
        ds.receive(dp);
        byte[] a=dp.getData();
        int length2 = a.length;
        String s=new String(a,0,length2);
        System.out.println("接收到"+s);
    }
}

4)InetAddres:在java中表示网络的IP地址:包括可以进行表示域名和IP地址
域名解析: 有专门的DNS域名解析服务器:对所有的域名进行解析为IP地址。因为网络通信必须是使用IP地址进行的。
本机的域名解析的过程:
1.取寻找C:/Windows/System32/drives/etc/hosts IP和域名的对应关系。如果找到就直接使用IP地址,它不会去验证该IP地址是否有效。
2.如果找不到,则取寻找本机配置的DNS服务上面去寻找:依次从主DNS,从DNS上面去寻找,如果找到就使用该IP地址访问,并缓存本地,如果找不到就报地址错误。
方法:它提供了使用域名和IP地址来构造InetAddress的实例。
5) 传输控制协议TCP(Transmission Control Protocol):
TCP 协议特点:
1.使用TCP协议前,须先建立TCP连接,形成传输数据通道 【TCP是以面向流的方式进行传输,并且是一个可靠传输,如果有错误,会自动重传。】
2.传输前,采用“三次握手”方式,是可靠的 :
3.TCP协议进行通信的两个应用进程:客户端最先发起、服务端被动接受
4.在连接中可进行大数据量的传输:一旦连接建立好之后,传输的链路就是固定的,可以一直传输数据,直到关闭为止。
5.传输完毕,需释放已建立的连接[4次挥手],效率低
特点:可靠传输,大量数据传输,传输的连接效率较低:一般用来传输比较数据量大,需要可靠的应用场景:例如:浏览器的网页,FTP,游戏连接等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值