网络
什么是网络
一组网线连接起来的计算机
作用:
- 资源共享
- 传输信息
- 分布式的计算
- 综合性的服务
协议
什么是协议:计算机之间通信的规则
常用协议
- IP:网际协议,传输信息
- TCP:传输控制协议,保证数据的准确传输
- HTTP:超文本传输协议
- FTP:文件传输协议
- SMTP:简单邮件传输协议,发邮件
internet:互联网,是一个通用名词,泛指由多个计算机网络互联而成的虚拟网络。
Internet:因特网,是一个专用名词,指当前全球最大的、开放的、由众多网络相互连接而成的特定的计算机网络,它采用TCP/IP协议簇。
www :万维网
IP
网络中计算机的唯一标识。找计算机的。
IP地址
二进制 11000000 . 00001001 . 00010000 . 00001100
十进制 192 . 9 . 16 . 12
IP地址分类
InetAddress
常用方法
- getLocalHost ()
- getByName (String host)
- getHostName()
- getHostAddress()
DNS:域名解析
端口:用于实现程序间的通信。找程序的
常用的公认端口
协议 | 端口 |
---|---|
简单邮件传输协议 | 25 |
文件传输协议 | 21 |
超文本传输协议 | 80 |
URL:同一资源定位器
URL格式:
protocol :// hostname[:port] / path / [?query]#fragment
http://服务器名称[:端口号](可写可不写)/目录/[?查询字符串=值 &](可写可不写) #片段
常用方法:
- getProtocol()
- getHost()
- getPort()
- getDefaultPort()
- getQuery()
- getRef()
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class TestURL {
public static void main(String[] args) throws IOException {
URL url = new URL("http://10.125.6.58:8900/data/a.txt?id=1 & page = 1 #星期3");
//获得协议
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());
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
public class TestURL2 {
public static void main(String[] args) throws IOException {
//https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=122725310,2432101887&fm=27&gp=0.jpg
//下载图片
//定位器
URL url = new URL("https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=122725310,2432101887&fm=27&gp=0.jpg");
//下载
//读
InputStream in = url.openStream();
//写
OutputStream out = new FileOutputStream("d:/data/datou.jpg");
int temp;
while((temp = in.read()) != -1){
out.write(temp);
}
in.close();
out.close();
}
}
数据传输
- java支持TCP和UDP协议族
- TCP/IP协议
- 较可靠的双向流协议,准确,速度慢
- 发送任意数量的数据
- UDP协议
- 比较不可靠,速度块
- 发送数据限制在64k以下
客户端/服务器模式
C/S : 客户端/服务器模式
B/S:
TCP协议通信
java.net包
Java的java.net包含了所有的用于网络操作的类
客户端Socket (IP,端口)
Socket 类
服务端ServerSocket(端口)
ServerSocket类
实现一个服务器和客户端通信
客户端代码
package day27.socket4;
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;
/**客户端服务器互相通信 */
public class Client {
public static void main(String[] args) throws IOException {
//socket
//创建一个客户端
//Socket socket = new Socket("10.125.6.186",6789);
//Socket socket = new Socket(InetAddress.getLocalHost(),6789);
Socket socket = new Socket("127.0.0.1",6789);
//流,底层的
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//读
Scanner in = new Scanner(is);//nextLine
//写 强制刷新缓冲区
PrintWriter out = new PrintWriter(os,true);
System.out.println("===========客户端======================");
System.out.print("客户端服务器连接成功");
//服务器先发信息过来,客户端收,读
//读
String sr,sw;
Scanner input = new Scanner(System.in);
while(true){
sr = in.nextLine();//读一行信息
System.out.print("服务器说:"+sr);
System.out.print("客户端说:");
sw = input.next();
out.println(sw);
if(sr.equals("end")){
break;
}
}
//写
socket.close();//关闭客户端
input.close();
}
}
服务端代码:
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;
public class Server {
public static void main(String[] args) throws IOException {
//Serversocket
//建立服务器
ServerSocket server = new ServerSocket(6789);
while(true){
//获得客户端连接,等待连接时处于阻塞状态
Socket socket = server.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//包装
Scanner in = new Scanner(is);//nextLine
// 强制刷新缓冲区
PrintWriter out = new PrintWriter(os,true);
System.out.println("===========服务器======================");
System.out.print("客户端服务器连接成功");
//读从客户端写的内容
Scanner input = new Scanner(System.in);
String sr,sw;
while(true){
sr = in.nextLine();
System.out.print("客户端说:"+sr);
System.out.print("服务器说:");
sw = input.next();
out.println(sw);
if(sw.equals("end")){
break;
}
}
socket.close();
}
}
}