Java网络编程入门

3 篇文章 0 订阅
1 篇文章 0 订阅

一.IP

IP: 定义网络上的不同节点(手机,电脑,路由器…)
IPv4:32位 IPV6:128位
非注册IP地址(公司内部使用): 192.168.0.0 ~ 192.168.255.255
特殊的IP:
127.0.0.1 本地IP
localhost 本机域名
DNS域名解析器:将域名解析成IP地址
java.net 类 InetAddress 此类表示互联网协议 (IP) 地址。
static InetAddress getLocalHost() :返回本地主机。
static InetAddress getByName(String host) :在给定主机名的情况下确定主机的 IP 地址

package com.liulei.ip01;

import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPDemo01 {
	public static void main(String[] args) throws UnknownHostException {
		InetAddress address1=InetAddress.getLocalHost();
		System.out.println(address1);
		
		/*
		 * String getHostAddress() 
		          返回 IP 地址字符串(以文本表现形式)。 
		   String getHostName() 
		          获取此 IP 地址的主机名。 
		 */
		System.out.println(address1.getHostAddress());
		System.out.println(address1.getHostName());
		
		InetAddress address2=InetAddress.getByName("www.baidu.com");
		InetAddress address3=InetAddress.getByName("115.239.211.112");
		System.out.println(address3);  //115.239.211.112
		System.out.println(address3.getHostAddress());  //115.239.211.112
		System.out.println(address3.getHostName());  //115.239.211.112
	}
}

二.端口

端口: 区分软件的
定义端口 2个字节 0~65535
相同的协议下端口不能冲突
端口自定义越大越好,8000以上,8000以内预留端口号
特殊的端口号:
80: http
8080: tomcat
1521: Oracle端口号
3306: mysql端口号
INetSocketAddress 此类实现 IP 套接字地址(IP 地址 + 端口号)。

package com.shsxt.ip01;
import java.net.InetSocketAddress;
public class PortDemo02 {
	public static void main(String[] args) {
		//InetSocketAddress(String hostname, int port)   根据主机名和端口号创建套接字地址。
		InetSocketAddress i=new InetSocketAddress("127.0.0.1",8888);
		System.out.println(i);
		/*
		 * InetAddress getAddress() 
		          获取 InetAddress。 
		   String getHostName() 
		          获取 hostname。 
		   int getPort()  获取端口 
		 */
		System.out.println(i.getAddress().getHostName());
		System.out.println(i.getHostName());
		System.out.println(i.getPort());
		
	}
}

三.URL

URL::统一资源定位符|器
互联网的三大基石::html http url
协议:http
域名:www.baidu.com
端口:80 默认80
资源:index.html?name=zhangsan&age=123#a
http://www.baidu.com:80/index.html?name=zhangsan&age=123#a
URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。

package com.liulei.ip01;

import java.net.MalformedURLException;
import java.net.URL;
public class URLDemo03 {
	public static void main(String[] args) throws MalformedURLException {
		/*
		 String getFile() 
		          获取此 URL 的文件名。 
		 String getHost() 
		          获取此 URL 的主机名(如果适用)。 
		 String getPath() 
		          获取此 URL 的路径部分。 
		 int getPort() 
		          获取此 URL 的端口号。 
		 String getProtocol() 
		          获取此 URL 的协议名称。 
		 String getQuery() 
		          获取此 URL 的查询部分。 
		 String getRef() 
		          获取此 URL 的锚点(也称为“引用”)。 
		 */
		URL url=new URL("http://www.baidu.com:80/index.html?name=zhangsan&age=123#a");
		System.out.println(url.getProtocol());
		System.out.println(url.getHost());
		System.out.println(url.getFile());
		System.out.println(url.getPath());
		System.out.println(url.getQuery());
		System.out.println(url.getRef());
	}
}

四.UDP协议

1.UDP的全称是User Datagram Protocol,中文意思是用户数据报协议。
非面向连接的 写信 ,不安全,效率高,协议简单,开销小,大小有限制一般不超过60k

2.应用层如何与传输层进行沟通?
通过Socket套接字
面向Socket编程,Socket相当于插座,是两层之间沟通的接口,不同协议,Socket的实现不一样
3. udp如何实现Socket编程: 发送端和接收端是平等的
1). DatagramSocket 此类表示用来发送和接收数据报包的套接字
2).DatagramSocket(int port)
3). DatagramPacket 此类表示数据报包。
4. UDP基本流程:发送端
1).创建发送端,指明发送端的端口
2).准备数据,转为字节数组
3).把数据打包 指明接收端的地址和端口号 DatagramPacket
4).发送数据
5).关闭

package com.liulei.utp02;

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

public class SendDemo01 {
	public static void main(String[] args) throws IOException {
		System.out.println("----------------发送端--------------");
		//1,创建发送端
		DatagramSocket socket=new DatagramSocket(8888);
		//2.准备数据,转为字节数组
		String str="那些你很冒险的梦";
		byte[] arr=str.getBytes();
		arr=new byte[0];
		//3.打包  DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 
		DatagramPacket packet=new DatagramPacket(arr,0,arr.length,new InetSocketAddress("localhost",9999));
		//4.void send(DatagramPacket p)  从此套接字发送数据报包。
		socket.send(packet);
		//5.关闭
		socket.close();
	}
}

5.UDP基本流程:接收端
1).构建接受端,指定接受端端口
2).准备字节数组,用来存储接口收据的
3).把字节数组打包
4).阻塞式接收
5).处理数据
6).关闭

package com.liulei.utp02;

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

public class ReceiveDemo02 {
	public static void main(String[] args) throws IOException {
		System.out.println("----------------接受端--------------");
		//1.构建接受端,指定接受端端口
		DatagramSocket socket=new DatagramSocket(9999);
		//2.准备字节数组,用来存储接口收据的
		byte[] arr=new byte[1024*60];
		//3.把字节数组打包 DatagramPacket(byte[] buf, int offset, int length) 
		DatagramPacket packet=new DatagramPacket(arr,0,arr.length);
		//4.接收 void receive(DatagramPacket p) 从此套接字接收数据报包。 
		socket.receive(packet);
		/*
		 *  byte[] getData() 返回数据缓冲区。 
		    int getLength() 返回将要发送或接收到的数据的长度。 
		 */
		//5.处理数据
		System.out.println(new String(packet.getData()));
		System.out.println(packet.getLength());
		//6.关闭
		socket.close();
	}
}

五.TCP

1.TCP的英文全称是Transmission Control Protocol,中文意思是传输控制协议。
TCP提供的是面向连接的可靠服务。
2.tcp基本流程:客户端
1).创建客户端 Socket 指定服务端的ip和端口 Socket(String host, int port)
2).io操作
3).关闭

package com.liulei.tcp03;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client01 {
	public static void main(String[] args) throws UnknownHostException, IOException {
		
		System.out.println("------------Client-----------");
		//1.创建客户端  Socket 指定服务端的ip和端口
		Socket client=new Socket("127.0.0.1",9999);
		//2.io操作  OutputStream getOutputStream()    返回此套接字的输出流。 
		DataOutputStream out=new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
		out.writeUTF("name=hangsan&pwd=123");
		//3.关闭
		out.flush();
		out.close();
		client.close();
	}
}

3.tcp基本流程:服务端
1).构建服务端 ServerSocket 指定端口 ServerSocket(int port)
2).阻塞式监听 Socket accept()
3).一个客户端就是一个socket IO操作
4).关闭

package com.liulei.tcp03;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server02 {
	public static void main(String[] args) throws IOException {
		System.out.println("------------Server-----------");
		//	1.构建服务端  ServerSocket  指定端口
		ServerSocket server=new ServerSocket(9999);
		// 	2.阻塞式监听
		Socket socket=server.accept();
		System.out.println("一个客户端连接成功");
		// 	3.一个客户端就是一个socket  IO操作
		DataInputStream is=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
		String str=is.readUTF();
		System.out.println(str);
		//  4.关闭
		is.close();
		socket.close();
		server.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值