网络中进程之间如何通信
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。
1.网络的基础知识
1)IP地址:为实现网络中不同计算机之间的通信,每台机器之间必须有一个唯一标识
2)协议:一个共同的语言,用于两者的沟通
3)端口号:端口好比车厢的座位号,只告诉你车厢号还不够详细,要告诉你座位号才能对号入座啊。
(0~65535),其中0~1023为系统保留
两个主机之间要进行通信,就必须遵守这两个协议
IP地址和端口号组成了我们的Socket,Socket是网络上运行的程序之间通信链路的终结点,是TCP和UDP的基础。
java中的网络支持(四大类)
1.InetAddress:用于标识网络上的硬件资源。
2.URL统一资源定位符 通过URL可以直接读取或写入网络上的数据。
在日常生活中访问的每一个网址都是一个URL,表示Internet上某一资源地址。一般由两部分组成:协议名称和资源名称,
中间用冒号隔开。
3.Socket: 使用TCP协议实现网络通信的Socket相关的类
4.Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信。
TCP和UDP
1)UDP:
将数据及源和目的封装成数据包中,不需要建立连接。
每个数据包的大小限制在64K内
因无连接,是不可靠协议
不需要建立连接,速度快
2)TCP:
建立连接,形成传输数据的通道。
在连接中进行大量数据传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低。 3)应用:UDP如QQ聊天,视频会议等
TCP如下载等
4)举例:UDP如同报话机。
TCP如同打固定电话。
列:InetAddress类的使用。
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
public class test {
public static void main(String[] args) throws UnknownHostException {
//获取本机的 InetAddress 对象
InetAddress address = InetAddress.getLocalHost();
System.out.println("计算机名:"+address.getHostName());
System.out.println("IP地址:"+address.getHostAddress());
byte[] bytes = address.getAddress();
System.out.println("字节数组成的IP:"+Arrays.toString(bytes));
System.out.println(address);
//根据计算机名获取InetAddress实例
//InetAddress address1 = InetAddress.getByName("H-star");
InetAddress address1 = InetAddress.getByName("59.69.165.49");
System.out.println("计算机名:"+address.getHostName());
System.out.println("IP地址:"+address.getHostAddress());
}
}
运行结果:
—————————————————未完待续—————————————————————