JAVA学习笔记--JAVA网络编程
程序员文章站
2022-07-12 08:07:10
...
IP
ip地址:InetAddress
- 唯一定位一台网络上计算机
- 127.0.0.1:本机localhost
- ip地址的分类
- ipv4 / ipv6
- 公网(互联网)- 私网(局域网)
try { //查询本机地址 InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1"); System.out.println(inetAddress1); InetAddress inetAddress3 = InetAddress.getByName("localhost"); System.out.println(inetAddress3); InetAddress inetAddress4 = InetAddress.getLocalHost(); System.out.println(inetAddress4); //查询网站ip地址 InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com"); System.out.println(inetAddress2); //常用方法 System.out.println(inetAddress2.getCanonicalHostName());//规范的名字 System.out.println(inetAddress2.getHostAddress());//ip System.out.println(inetAddress2.getHostName());//域名,或者自己电脑的名字 } catch (UnknownHostException e) { e.printStackTrace(); } }
端口
端口表示计算机上的一个程序的进程
- 不同的进程有不同的端口号!用来区分软件
- 被规定0-65535
- 单个协议下,端口号不能冲突
- 端口分类
- 公有端口0-1023
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
- 程序注册端口:1024-49151,分配用户或者程序
- Tomcat:8080
- MySQL:3306
- Oracle:1521
- 动态、私有:49152-65535
netstat -ano #查看所有端口 netstat -ano|findstr 8080 #查看指定的端口 tasklist|findstr 8080 #查看指定端口的进程 Ctrl + shift + ESC #打开任务管理器
- 公有端口0-1023
通信协议
协议:约定,就好比我们现在说的是普通话
网络通信协议:速率,传输码率,代码结构,传输控制。。。。
TCP/IP协议簇:实际上是一组协议
- TCP:用户传输协议
- UDP:用户数据报协议
- IP:网络互连协议
TCP和UDP对比
TCP:打电话 - 连接稳定
- 三次握手 四次挥手
- 客户端、服务端
- 传输完成,释放连接,效率低
UDP:发短信 - 不连接,不稳定
- 客户端、服务端:没有明确的界限
- 不管有没有准备好,都发送
TCP
客户端
- 连接服务器
- 发送消息
//客户端 public class TcpClientDemo01 { public static void main(String[] args) { Socket socket = null; OutputStream os = null; try { //1.要知道服务器的地址,端口号 InetAddress serverIP = InetAddress.getByName("127.0.0.1"); int port = 9999; //2. 创建一个socket连接 socket = new Socket(serverIP,port); //3. 发送消息 IO流 os = socket.getOutputStream(); os.write("你好".getBytes()); } catch (Exception e) { e.printStackTrace(); }finally { if (os!=null){ try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
服务器
- 建议服务的端口 ServerSocket
- 等待用户的连接 accept
- 接收用户的消息
//服务端 public class TcpServerDemo01 { public static void main(String[] args) { ServerSocket serverSocket = null; Socket socket = null; InputStream is = null; ByteArrayOutputStream baos = null; try { //1.我得有一个地址 serverSocket = new ServerSocket(9999); while (true) { //2.等待客户端连接过来 socket = serverSocket.accept(); //3. 读取客户端的消息 is = socket.getInputStream(); //管道流 baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } System.out.println(baos.toString()); } } catch (IOException e) { e.printStackTrace(); } finally { if (baos != null) { try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket != null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if (serverSocket != null) { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Tomcat
服务端
- 自定义
- Tmocat服务器:Java后台开发
客户端
- 自定义
- 浏览器
UDP
发短信:不用连接,需要知道对方的地址
发送消息
//不需要连接服务器
public class UdpClientDemo01 {
public static void main(String[] args) throws Exception {
//1.建议一个Socket
DatagramSocket socket = new DatagramSocket();
//2.建个包
String msg = "你好啊";
//发送给谁
InetAddress localhost = InetAddress.getByName("localhost");
int port = 9090;
//数据,数据的长度起始,要发送给谁
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
//3.发送包
socket.send(packet);
//4.关闭流
socket.close();
}
}
接收端
//还是要等待客户端的链接
public class UdpServerDemo01 {
public static void main(String[] args) throws Exception{
//开放端口
DatagramSocket socket = new DatagramSocket(9090);
//接收数据包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);//阻塞接收
System.out.println(packet.getAddress().getHostAddress());
System.out.println(new String(packet.getData(),0, packet.getLength()));
//关闭连接
socket.close();
}
}
咨询
循环发送消息
public class UdpSenderDemo01 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
//准备数据:控制台读取System.in
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true){
String data = reader.readLine();
byte[] datas = data.getBytes();
DatagramPacket packet = new DatagramPacket(datas,0,data.length(),new InetSocketAddress("localhost",6666));
socket.send(packet);
if (data.equals("bye")){
break;
}
}
socket.close();
}
}
循环接收消息
public class UdpReceiveDemo01 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(6666);
while (true) {
//准备接收包裹
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
socket.receive(packet);//阻塞式接收包裹
//断开连接 bye
byte[] data = packet.getData();
String receiveData = new String(data, 0, data.length);
System.out.println(receiveData);
if (receiveData.equals("bye")){
break;
}
}
socket.close();
}
}
在线咨询:两个人都可以是发送方,也都可以是接收方
URL
统一资源定位符:定位资源的,定位互联网上的某一个资源
DNS域名解析
协议://ip地址:端口/项目名/资源
上一篇: LeetCode 1351. 统计有序矩阵中的负数
下一篇: Java精选笔记_Java编程基础