端口:区分数据流向的软件 0-65535 不要使用 1024 以下的端口 (基本被用了),每一个协议拥有自己的端口,在同一个协议下端口不能重复 FTP:21 HTTP:80 tomcat:8080 1521: oracle 3306: mysql
* 网络编程:
* IP:定位网络上的节点,电脑,手机,服务器,路由器..(电子设备)
* 网络中的IP重要分为2大类:
* IPV4 32
* IPV6 128
* 特殊的ip:
* 192.168.0.0~192.168.255.255 非注册IP,供组织内部使用
* 127.0.0.1 本地IP
* localhost: 本地域名
* ip与域名 DNS服务器
* java中如何表示IP:
* InetAddress 这个类代表一个互联网协议(IP)地址。
*
* 端口:区分软件
* url:定位资源 统一资源定位符
*
* 协议: 协议就是交流方式, 更畅通,更标准,更规范
* 传输协议: 传输数据满足传输协议
* tcp:相当于打电话 *** 三次握手,得俩边同意
* udp:相当于写信 一方对另一方
InetAddress.getLocalHost();
InetAddress.getByName("www.163.com"); //通过网站获取ip
InetAddress.getByName("223.87.1.58")
getHostAddress() 返回 ip 地址
getHostName() 返回域名|本机为计算机名
public static void main(String[] args) throws UnknownHostException {
//static InetAddress getLocalHost() 返回本地主机的地址。
InetAddress in1=InetAddress.getLocalHost();
System.out.println(in1); //AB-201905250842/192.168.3.105
//static InetAddress getByName(String host) 决定了IP地址的主机,主机的名字。
InetAddress in2=InetAddress.getByName("www.shsxt.com"); //参数可以是IP和域名
System.out.println(in2);
InetAddress in3=InetAddress.getByName("123.56.138.186"); //参数可以是IP和域名
System.out.println(in3);
System.out.println("===============");
/*
* String getHostAddress() 返回的IP地址字符串的文本表示。
String getHostName() 这个IP地址的主机名。
*/
System.out.println(in1.getHostAddress()); //192.168.3.105
System.out.println(in1.getHostName()); //AB-201905250842
System.out.println(in2.getHostAddress());
}
//结果是:
MSI/192.168.3.64
www.shsxt.com/123.56.138.186
/123.56.138.186
===============
192.168.3.64
MSI
123.56.138.186
端口
端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机
上运行多个网络应用程序。可以类比为:IP 相当于公司,端口相当于公司各部门,URL,相当于各部门的人员
udp: 发信息,非面向连接 不安全 协议简单,开销小,效率高 大小有限制,一般不超过60k
tcp: 打电话,面向连接 安全,效率低 基于3次握手: 1.拨号 2.响应,连接上 3.发送数据
URL
* URL: 统一资源定位符
* 互联网的三大基石: url html http
UDP
* udp实现基本流程: 发送端 * 1.定义发送端 * DatagramSocket(int port) 构造一个数据报套接字绑定到本地主机上的指定端口。 * 2.准备数据 * 3.给数据打包 * DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个数据报包发送数据包的长度 length指定主机上的指定端口号。 * 4.发送 * 5.关闭 |
public class UDPSend01 {
public static void main(String[] args) throws IOException {
System.out.println("------------------发送端-------------------");
//1.定义发送端
DatagramSocket client= new DatagramSocket(8888);
//2.数据
byte[] str="因为哈哈".getBytes();
//3.打包
DatagramPacket packet=new DatagramPacket(str,str.length,new InetSocketAddress("localhost", 9999));
//4.发送
client.send(packet);
//5.关闭
client.close();
}
}
* udp实现基本流程: 接收端 * 1.定义接收端 * 2.准备盒子接收数据 * DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket length接收数据包的长度。 * 3.接收 receive(packet) * 4.关闭 |
public static void main(String[] args) throws IOException {
System.out.println("------------------接收端-------------------");
//1.定义接收端
DatagramSocket server= new DatagramSocket(9999);
//2.准备一个字节数组,打包
byte[] car=new byte[1024];
DatagramPacket packet=new DatagramPacket(car,car.length);
//3.接收
server.receive(packet);
//处理数据
/*
byte[] getData()
返回数据缓冲区。
int getLength()
返回数据的长度发送或接收到的数据的长度。
*/
byte[] datas=packet.getData();
int length=packet.getLength();
System.out.println(new String(datas,0,length));
//5.关闭
server.close();
}
TCP
* tcp实现基本流程: 客户端 * 1.定义客户端 Socket Socket(String host, int port) 创建一个流套接字连接到指定主机上的指定端口号。 * 2.准备数据 * 3.写出 IO操作 * 4.关闭 |
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-------------Client-----------");
//1.定义客户端 Socket Socket(String host, int port)
Socket client=new Socket("127.0.0.1",7777);
//2.准备数据
String str="name=zhangsan&pwd=123";
//3.写出 IO操作
DataOutputStream data=new DataOutputStream(client.getOutputStream());
data.writeUTF(str);
data.flush();
//4.关闭
data.close();
client.close();
}
* tcp实现基本流程: 服务端 * 1.定义服务端 ServerSocket ServerSocket(int port) 创建一个服务器套接字绑定到指定端口。 * 2.阻塞式监听 Socket accept() 监听连接套接字并接受它。 * 3.io操作 * 4.关闭 |
public static void main(String[] args) throws IOException {
System.out.println("-------------Server-----------");
//1.定义服务端
ServerSocket server=new ServerSocket(7777);
//2.阻塞式监听 Socket accept()
Socket client=server.accept();
//3.io操作
DataInputStream in=new DataInputStream( client.getInputStream());
String str=in.readUTF();
System.out.println(str);
//4.关闭
in.close();
client.close();
server.close();
}