Java网络编程

网络基础

网络的相关概念

网络通讯

概念:两台设备之间通过网络实现数据传输。即将数据通过网络从一台设备传输到另一台设备

在Java中java.net包下提供了一系列的类和接口,供程序员使用,完成网络通讯。

网络

概念:两台或多台设备通过一定的物理设备连接起来构成了网络。

根据网络的覆盖范围不同,对网络进行分类:

1.局域网:覆盖范围最小,仅仅覆盖一个教室或者一个机房。

2.城域网:覆盖范围较大,可以覆盖一个城市。

3.广域网:覆盖范围最大,可以覆盖全国,甚至全球,万维网是广域网的代表。

IP地址

        用于唯一标识网络中的每一台计算机/主机,在命令行可以通过ipconfig指令查看本机ip地址。

如(以IPV4举例):192.168.16.1 其表示形式为 点分十进制 xx.xx.xx.xx 每一个十进制数范围为0~255(一个字节)

IP地址的组成:网络地址+主机地址

域名

        如:www.baidu.com    其是为了方便记忆,解决IP难记的问题。 其通过HTTP协议将IP地址映射成域名。

端口

        用于标识计算机上某个特定的网络程序。表示形式:以整数形式,端口范围0~65535 [2个字节表示端口0~2^16-1],要注意:0~1024已经被占用,比如 ssh 22, ftp 21, smtp 25 http 80

             

常见的网络程序端口号:
·tomcat :8080
·mysql:3306
·oracle:1521
·sglserver:1433

网络通讯协议

        协议TCP/IP (Transmission Control Protocol/Internet Protocol)中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的

       

对网络协议的理解:在网络通讯时 数据的组织形式,就是协议 

对网络传输的数据进行的组织形式如下: 

                            

TCP和UDP

TCP协议:传输控制协议
        1.使用TCP协议前,须先建立TCP连接,形成传输数据通道
        2. 传输前,采用"三次握手"方式,是可靠的
        3.TCP协议进行通信的两个应用进程◇客户端、服务端
        4.在连接中可进行大数据量的传输
        5.传输完毕,需释放已建立的连接,效率低
UDP协议:用户数据协议
        1.将数据、源、目的封装数据包◇不需要建立连接
        2.每个数据报的大小限制在64K内,不适合传输大量数据
        3.因无需连接◇故是不可靠的
        4.发送数据结束时无需释放资源(因为不是面向连接的),速度快
        5.举例: 厕所通知:发短信

 TCP的三次握手:


Java网络编程

java_InetAddress类

        InetAddress类主要用于表示互联网协议(IP)地址。它提供了一些方法来获取和操作 IP 地址相关的信息,比如:
        获取本地主机的InetAddress实例。
        根据主机名或 IP 地址字符串获取对应的InetAddress实例。
        获取 IP 地址的字节表示等。
它在网络编程中经常被用于建立网络连接、识别网络节点等操作

public class Ipnet {

	//InetAddress 常见方法 获得InetAddress实例一般不用构造器,而是使用静态方法(即;内部工厂方法)
	public static void main(String[] args) throws UnknownHostException {
		//1.获取 本机InetAddress对象(本机地址)
		InetAddress localAddress=InetAddress.getLocalHost();
		System.out.println("host1 = "+localAddress);
		//2.根据 域名获取InetAddress对象(域名地址)
		InetAddress domainAddress=InetAddress.getByName("www.baidu.com");
		System.out.println("host2 = "+domainAddress);
		//3.根据 指定主机名(ip地址)获取InetAddress对象(ip地址)
		InetAddress ipAddress=InetAddress.getByName("梦安");
		System.out.println("host3 = "+ipAddress);
		//4.根据 InetAddress对象获取对应地址
		String ipAddress2=localAddress.getHostAddress();
		System.out.println("ipAddress2 = "+ipAddress2);
	}
}

java_Socket类

        Socket类在网络编程中起着重要作用。它代表了客户端和服务器之间的一个通信端点。通过创建Socket对象,可以实现客户端与服务器之间的数据传输。

主要特点和功能包括:
        可以建立 TCP 连接(流式套接字)。
        提供输入流和输出流用于数据的读写。
        可以设置各种连接参数,如超时时间等。
使用Socket类能够方便地进行网络通信程序的开发,实现不同主机之间的数据交互

TCP编程

 如下代码实现,客户端向服务端发送数据:

public class SocketTCP01Server {
	public static void main(String[] args) throws IOException {
		//1.在主机 9999端口 监听,等待连接;
		ServerSocket serverSocket = new ServerSocket(9999);
		System.out.println("服务端在9999监听....");
		//2. 当没用客户端链接 9999 端口时,程序会阻塞,等待连接。
		//如果用客户端连接,则会返回Socket对象,程序继续。
		Socket socket=serverSocket.accept();
		System.out.println("socket = "+socket.getClass());
		//3.通过Socket。getInputStream()读取客户端写入到数据通道的数据,显示。
		InputStream inputStream = socket.getInputStream();
		//4.读入
		byte[]buf=new byte[1024];
		int readLen=0;
		while ((readLen=inputStream.read(buf))!=-1){
			System.out.println(new String(buf,0,readLen));
		}
		//5.关闭流
		inputStream.close();
		socket.close();
		serverSocket.close();



	}
}
public class SocketTCP01Client {
	public static void main(String[] args) throws IOException {
		//1.连接服务端(IP,端口)
		Socket socket=new Socket(InetAddress.getLocalHost(),9999);
		System.out.println("客户端 socket返回 = "+socket.getClass());
		//2.连接后,生成Socket,通过 socket。getOutStream()
		//得到与socket对象联系的 输出流对象
		OutputStream outputStream = socket.getOutputStream();
		//3.通过输出流,写入数据到 数据通道。
		for (int i = 0; i < 6; i++) {
			Scanner in =new Scanner(System.in);
			String next = in.next();
			outputStream.write(next.getBytes());
		}

		//关闭 流 socket ,必须关闭
		outputStream.close();
		socket.close();
		System.out.println("客户端退出!");


	}
}

双向发送数据时,需要设置写入结束标记  socket.shutdowmOutput();

  • 23
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值