网络编程

一、网络

网络:网线连接起来的计算机,用于数据共享,信息传输。

二、协议

协议:网络中计算机之间通信的规则
常用协议:

  • IP:网际协议,用于计算机之间基本的信息传输,传输的数据包正不正确就保证不了。
  • TCP:传输控制协议,用于控制传输数据的准确性,可以准确传输。
  • HTTP:超文本传输协议,可以通过超链接访问超文本信息。
  • FTP:文件传输协议,通过FTP共享文件信息,其他用户可以从FTP上下载需要的资源。
  • SMTP:简单邮件传输协议,发邮件用的。

三、IP地址

二进制11000000.00001001.00010000.00001100
十进制192 .9.16.12
  • 目前大部分都是用十进制的表示方式,简单。
  • 网络号:指网络中计算机所在的网络
  • 主机号:网络中标识的计算机
  • IP地址分5类,根据网络号+主机号进行分类,每类所容纳的数量是不一样的。
IP分类起始位置终止位置网络号位数主机号位数
A类0.0.0.0127.255.255.255724
B类128.0.0.0191.255.255.2551416
C类192.0.0.0223.255.255.255218
D类224.0.0.0239.255.255.255--
E类240.0.0.0255.255.255.255--

四、InetAddress

InetAddress类是用来封装IP的类,IP封装
常用方法:

  • getLocalHost():获取本机的IP封装
  • getByName(String):根据主机名或IP地址获得一个IP封装
  • getHostName():根据IP封装获取主机名
  • getHostAddress():根据IP封装获取IP地址
package com.gaj.day04;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * InetAddress类
 * @author Jan
 *
 */
public class Demo4 {

	public static void main(String[] args) throws UnknownHostException {
		// 获取本机的主机名/IP地址
		System.out.println(InetAddress.getLocalHost());
		// 根据主机名或IP地址获得一个IP封装
		InetAddress inetAddress = InetAddress.getByAddress(new byte[] {(byte)192, (byte)168, (byte)227, 1});
//		InetAddress inetAddress = InetAddress.getByName("Katarina");
		// 获取主机的主机名
		System.out.println(inetAddress.getHostName());
		// 获取主机的IP地址
		System.out.println(inetAddress.getHostAddress());
		
	}

}

五、域名

DNS:域名解析器,根据域名找到对应IP

六、端口

端口:用于实现程序之间的通信,根据端口找到对应程序。
常用公认端口:

协议端口
简单邮件传输协议25
文件传输协议21
超文本传输协议80

七、URL

URL:统一资源定位器。

  • 格式:protocol://hostname[:port]/path/[?query]#fragment
  • 格式:协议://主机名:[:端口号]/路径/[?查询字符串]#片段

常用方法:

  • getProtocol():获取协议
  • getHost():获取主机名称/IP
  • getPort():获取端口号
  • getDefaultPort():获取默认端口号
  • getQuery():获取查询字符串
  • getRef():获取引用参照
package com.gaj.day04;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * URL 统一资源定位器
 * @author Jan
 *
 */
public class Demo5 {
	public static void main(String[] args) throws MalformedURLException {
		URL url = new URL("https://www.baidu.com:80/s?id=abc#ref=def");
		System.out.println(url.getProtocol());
		System.out.println(url.getHost());
		System.out.println(url.getPort());
		System.out.println(url.getDefaultPort());
		System.out.println(url.getQuery());
		System.out.println(url.getRef());
	}
}

八、数据传输

  • Java的Java.net包含了所有的用于网络操作的类
  • C/S:客户端/服务器,需要在客户端和服务器安装软件
  • B/S:浏览器/服务器
  • TCP:安全的传输
  • UDP:非安全的传输,速度较快

三次握手:

  1. 客户端向服务器发送请求信息
  2. 服务器收到请求信息后,向客户端发送确认信息
  3. 客户端收到确认信息后,回一个确认信息给服务器

Socket/ServerSocket
ServerSocket:用来创建服务器

package com.gaj.day04;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * 服务端
 * @author Jan
 *
 */
public class Server {

	public static void main(String[] args) throws IOException {
		// 建立一个服务器								端口
		ServerSocket serverSocket = new ServerSocket(1234);
		// 获得一个socket 服务器的socket和客户端的socket互相通信 
		// accept()是一个阻塞方法,需要进行三次握手,才能返回一个socket
		Socket socket = serverSocket.accept();
		// 获取双向流
		// socket底层自带IO字节流 
		InputStream is = socket.getInputStream();
		OutputStream os = socket.getOutputStream();
		// 对流进行包装
		Scanner scanner = new Scanner(is); // 读
		// true 表示自动刷新缓冲区(有缓冲区的需要flush刷新缓冲区)
		PrintWriter printWriter = new PrintWriter(os, true); // 写
		// 发送信息给客户端
		printWriter.println("您的请求已连接到服务器,请留言");
		Scanner sc = new Scanner(System.in); // 服务器控制台输入
		String s; // 用于保存服务器说的话
		while(true){ // 循环对话
			System.out.println("客户端:" + scanner.nextLine()); // 接收一行客户端说的话
			s = sc.nextLine(); // 服务器说一句话
			printWriter.println(s); // 将服务器的话发送到客户端
			if(s.equals("quit")){ // 如果输入quit则退出会话
				break;
			}
		}
		// 关闭流
		sc.close();
		is.close();
		os.close();
		printWriter.close();
		scanner.close();
		socket.close();
		serverSocket.close();
	}

}

Socket:用来创建客户端

package com.gaj.day04;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 * 客户端
 * 
 * @author Jan
 *
 */
public class Clinet {

	public static void main(String[] args) throws UnknownHostException, IOException {
		// 建立一个客户端 服务器IP ,服务器端口
		Socket socket = new Socket(InetAddress.getLocalHost(), 1234);
		// 获取socket底层的流
		InputStream is = socket.getInputStream();
		OutputStream os = socket.getOutputStream();
		// 包装流
		Scanner scanner = new Scanner(is); // 读
		PrintWriter printWriter = new PrintWriter(os, true); // 写 true:刷新缓冲区
		// 接收客户端发来的信息
		Scanner sc = new Scanner(System.in); // 客户端控制台输入
		String s; //用于保存客户端说的话
		while(true){ // 循环对话
			System.out.println("服务器:" + scanner.nextLine()); // 接收一行服务器的话
			s = sc.nextLine(); // 客户端说一句话
			printWriter.println(s); // 将客户端说的话通过包装流发送到服务器
			if(s.equals("quit")){ // 如果输入quit则退出会话
				break;
			}
		}
		// 关闭流
		sc.close();
		is.close();
		os.close();
		printWriter.close();
		scanner.close();
		socket.close();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值