当端口冲突,可以查看:cmd然后输入以下命令
URL包括协议,域名,端口号,文件名:
public class netProgramme {
//定位一个节点
public static void main(String[]args) throws UnknownHostException, MalformedURLException {
URL url=new URL("http://www.baidu.com:80/index.html?uname=shsxt&age=18#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.getPort());
System.out.println("参数"+ url.getQuery());
System.out.println("锚点"+url.getRef());
}
}
爬虫原理和模拟浏览器:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
//网络爬虫原理+模拟浏览器
public class IPTest {
public static void main(String[]args) throws IOException {
//获取URL
URL url=new URL("https://www.jd.com");
//下载资源
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent" , "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.82");
// InputStream is=url.openStream();
BufferedReader br=new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
String msg=null;
while(null!=(msg=br.readLine()))
{
System.out.println(msg);
}
br.close();
}
}
浅浅总结一下:对比这两个一个是获取URL,输入字节流并打开流,然后转化为字符流(由于都是字符打印和读取起来方便),然后用一个字符传打印接受到的数据到控制台;
另一个是模拟浏览器,先是和url建立起一个连接,并打开资源,获取get方法,和该资源的属性,右键该页面-》检查-》网络,随便将鼠标移到其中一个选项上面,翻到最后的User-urgent将带有这一串的包括他自己复制下来,用它来建立请求属性,重复普通方法的读入,将里面的输入流改为连接得到的;
传输层协议:
TCP:面向连接的,安全可靠的;先建服务器,后建客户端,发信双方需要连接,且存在主次之分;
UDP:非面向连接,传输不可靠,可能丢失数据,协议比较简单,通信双方完全平等
套接字:socket
InetSocketAddress()封装ip地址和窗口;
UDP编程,数据不能太大传输:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
/**
* 接收端
* 同一个协议下不可以有重复的端口
*1.使用DatagramSocket指定端口 创建接收端
*2.准备容器,封成DatagramPacket包裹
*3.阻塞式接受包裹receive(DatagramPacket p)
*4.分析数据getData()
* 返回字符数组;getLength()
* 释放资源
*/
public class UdpClient {
public static void main(String[]args) throws IOException {
System.out.println("发送方启动中.....");
DatagramSocket client=new DatagramSocket(8888);
String data="小饺子超级喜欢小麻子";
byte[]datas=data.getBytes();
DatagramPacket packet=new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",9999));
client.send(packet);
client.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
/**
* 发送端
*1.使用DatagramSocket指定端口 创建发送端
*2.准备数据,要转成字节数组
*3.封成DatagramPacket包裹,需要指定目的地
*3.发送包裹send(DatagramPacket p)
* 释放资源
*/
public class UdpServer {
public static void main(String[]args) throws IOException {
System.out.println("接收方启动中....");
DatagramSocket server=new DatagramSocket(9999);
byte[]container=new byte[60*1024];
DatagramPacket packet=new DatagramPacket(container,0,container.length);
server.receive(packet);
byte[]datas= packet.getData();
System.out.println(new String(datas,0,packet.getLength()));
server.close();
}
}
同时启动两个窗口即可发送;
mysql中不区分大小写:
数据库的基本操作:
SHOW DATABASES:列出所有数据库;
CREATE DATABASES 数据库名 DEFAULT SET utf8 COLLATE utf8_general_ci;创建数据库并指定数据库的字符集 COLLATE 字符编码校验规则;
DROP DATABASES 删除数据库;
ALTER DATABASES 数据库名 DEFAULT CHARACTER SET 重新指定的字符集;
如果出现了相同名称的表格,想要搜索某个在数据库下面的,除了具体操作也可以输入以下代码:
USE 数据库名;1)
SELECT *FROM 表的名称;2)
先运行上面的1)再运行下面的2);
数据库中表的基本操作:
创建表:CREATE TABLE 表名{
写出你想要的字段名 规定它的数据类型(在该数据类型里规定的有效数字);
(注意:这里面的字段类型可以写很多个);
PRIMARY KEY(设置一个字段名为键);
}
例如:这里创建了一个学生信息的管理库;
CREATE TABLE student (
id int(10)NOT NULL,
name VARCHAR(100),
age int (2),
class VARCHAR(100),
PRIMARY KEY(id)
);
刚创建完之后是长这样的:
在表中添加字段:ALTER TABLE 表名 ADD COLUMN 字段名 字段类型(字段类型要求下的有效数字);
在表中添加多个字段:ALTER TABLE 表名 ADD 字段名 字段类型,ADD 字段名 字段类型;(在添加多个字段的情况下,在数据类型后面添加有效数字位数没有多大意义);
修改表中字段数据类型:ALTER TABLE 表格类型 MODIFY COLUMN 字段名称 想要修改成的字段类型;
虽然辛苦,我还是会选择那种滚烫的人生。