Java网络编程简介

网络编程的基本概念

IP和端口

        IP是互联网中联网设备的唯一标识,而网络编程是和远程计算机的通信,所以必须要能定位到远程计算机,IP就是用来解决此类问题;一台计算机中可能有很多进程,具体和哪一个进程进行通信,这就得靠端口来识别。

TCP和UDP协议

        TCP是Tranfer Control Protocol的简称,是一种面向连接的可靠传输协议。通过TCP协议传输,得到是一个顺序的无差错的数据流。TCP比较复杂,但能够为要求可靠性的应用层协议提供服务,如文件传输、邮件发送、网页浏览、远程登录等等。

        UDP是User Datagram Protocol的简称,是一种无连接的协议,将数据封包成一个个数据报,独立传输。UDP协议传输不能保证数据不丢失、无差错,也不能保证数据的发送与接收的顺序是一致的。UDP协议比较简单,效率较高,能为对可靠性要求不高、实时性要求比较高的应该提供服务,如即时通讯,视频会议,直播等。

TCP协议特点:

1、面向连接的,提供可靠的数据传输服务;

2、提供了流量控制,TCP能够控制进程发送数据的速率,保证另一端不被大量的数据淹没而出现溢出;

3、提供了阻塞控制,当网络出现阻塞时,TCP也会控制数据的速率和数量;

4、必须建立连接,效率会稍低,但在连接中可以进行大数据量传输;

UDP协议特点:

1、面向无连接的,是一种尽最大努力的方式,不提供可靠的数据传输服务;

2、UDP没有阻塞和流量控制;

3、不需要建立连接,速度较快;

4、UDP是以数据报来传输的,每个数据报的大小限制在64k内;

Socket

        Socket是网络驱动层提供给应用程序编程接口或者说是一种机制。网络上的两个程序通过一个双向的通讯连接实现数据交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程方式,一个Socket由一个IP地址和一个端口号唯一确定。

        Socket是在应用程序中创建的,它是通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port。创建完Socket以后,应用程序将数据写入到Socket中,由Socket交给驱动程序向网络发送数据;计算机从网络上收到与某个Socket绑定的IP和Port的相关数据后,再由驱动程序交给Socket,应用程序便可以从这个Socket中读取收到的数据。网络应用程序就是这样通过Socket发送和接收数据的。

Socket的基本工作流程包含以下四个步骤:

1、创建Socket;

2、打开连接到Socket的输入输出流;

3、按照一定的协议对Socket进行读写操作;

4、关闭Socket;

Java网络编程常用类

InteAddress类

        InteAddress是一个封装IP地址信息的类。IP地址是使用32位或者128位无符号数字,UDP和TCP协议都是在它的基础上构建的。InteAddress将IP地址以对象的形式进行封装,可以更方便的操作和获取其属性。注意InteAddress没有构造方法,只可以通过静态方法来获取它的对象(该方法会自动判断是创建Inte4Address,还是创建Inte4Address)。

下面是InteAddress的常用方法:

// 获取本地主机IP地址对象

static InetAddress getLocalhost();

// 获取给定主机名的IP地址对象

static InetAddress getByName(String host);

// 获取给定主机名的IP地址对象数组

static InetAddress[] getAllByName(String host);

// 通过IP地址获取InetAddress对象

static InetAddress getByAddress(byte[] addr);

// 获取IP地址字符串 

String getHostAddress();

// 获取此IP地址主机名

String getHostName();

import java.net.InetAddress;

public class IpDemo {
	public static void main(String args[]) throws Exception {
		// 获取本机Ip
		InetAddress localhost = InetAddress.getLocalHost();
		System.out.println("address: " + localhost.getHostAddress());
		System.out.println("name: " + localhost.getHostName());

		// 获取指定域名主机IP(如果该主机有多个IP,只获取其中一个)
		InetAddress ia = InetAddress.getByName("www.baidu.com");
		System.out.println("address: " + ia.getHostAddress());
		System.out.println("name: " + ia.getHostName());

		// 获取指定域名主机所有IP
		InetAddress[] iaArray = InetAddress.getAllByName("www.sina.com");
		for (InetAddress i : iaArray) {
			System.out.println("address: " + i.getHostAddress());
			System.out.println("name: " + i.getHostName());
		}

		// 通过IP地址获取InetAddress对象
		InetAddress ip = InetAddress.getByAddress(new byte[] { 121, 14, 1, (byte) 189 });
		System.out.println(ip.getCanonicalHostName());
	}
}

Socket和ServerSocket类

        Socket和ServerSocket类均位于java.net包中,是Java实现TCP协议通信的重要类。Socket表示客户端套接字,用来接收和发送数据的;ServerSocket表示服务器端套接字,用来监听客户端请求连接,并建立连接,获取对应socket对象。(详情参照Java TCP通信)

DatagramSocket和DatagramPacket类

         DatagramSocket和DatagramPacket均位于java.net包中,是Java实现UDP协议通信的重要类。DatagramPacket用来表示存放数据的数据报,DatagromSocket用来接受或者发送数据报。(详细参照Java UDP通信)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值