一、IP地址

1、唯一标识网络上的每一台计算机 ,目前大部分都是虚拟的,因为255255255*255个不够分;
2、32的,由4个8位二进制组成———>十进制显示
3、每个网络号对应得IP数范围是0~255;超过255就是不存在,最大的IP地址是255.255.255.255
4、例如,210.10.8.1的网络ID是:210.10.8;因为是C类,所以网络ID取三个数
image.png

5,查找本机IP地址,—>打开CMD—>ipconfig

6、测网速—>ping—>目标地址

7、基于TCP协议的Socket编程

建立客户端和服务器端,实现通信
客户端

  1. package cn.bdqn.web.TCP;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStream;
  7. import java.net.Socket;
  8. public class LoginClient {
  9. /*
  10. * 客户端
  11. */
  12. public static void main(String[] args) {
  13. Socket socket=null;
  14. OutputStream os=null;
  15. InputStream is=null;
  16. InputStreamReader isr=null;
  17. BufferedReader br=null;
  18. try {
  19. //建立与服务器连接--跨电脑接收,比如,我负责客户端,那么IP地址就要改成负责服务器端电脑的IP
  20. socket=new Socket("localhost",8002);//127可以换成localhost
  21. os=socket.getOutputStream();
  22. String s="用户名:wangpeng,密码是:123456";
  23. os.write(s.getBytes());
  24. socket.shutdownOutput();
  25. //接收服务器过来的信息
  26. is=socket.getInputStream();
  27. isr=new InputStreamReader(is);
  28. br=new BufferedReader(isr);
  29. String s1=null;
  30. while(true){
  31. s1=br.readLine();
  32. if(s1!=null){
  33. break;
  34. }
  35. }
  36. System.out.println("客户端接收"+s1);
  37. socket.shutdownInput();
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. }finally{
  41. try {
  42. if(os!=null){
  43. os.close();
  44. }
  45. if(br!=null){
  46. br.close();
  47. }
  48. if(isr!=null){
  49. isr.close();
  50. }
  51. if(is!=null){
  52. is.close();
  53. }
  54. if(socket!=null){
  55. socket.close();
  56. }
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. }
  62. }

服务器端

  1. package cn.bdqn.web.TCP;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStream;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. public class LoginServer {
  10. /*
  11. * 服务器端接收消息
  12. */
  13. public static void main(String[] args) {
  14. ServerSocket socket=null;
  15. Socket so=null;
  16. InputStream is=null;
  17. InputStreamReader isr=null;
  18. BufferedReader br=null;
  19. OutputStream os=null;
  20. try {
  21. socket=new ServerSocket(8002);
  22. //阻断方法,等待客户端发送请求
  23. so=socket.accept();
  24. //获得输入流
  25. is=so.getInputStream();
  26. isr=new InputStreamReader(is);
  27. //读取输入流
  28. br=new BufferedReader(isr);
  29. String s=null;
  30. while(true){
  31. s=br.readLine();
  32. if(s!=null){
  33. break;
  34. }
  35. }
  36. System.out.println("服务器接收:"+s);
  37. so.shutdownInput();
  38. //回复一个信息
  39. os=so.getOutputStream();
  40. os.write("欢迎你,来到socket的世界".getBytes());
  41. so.shutdownOutput();
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }finally{
  45. try {
  46. if(br!=null){
  47. br.close();
  48. }
  49. if(isr!=null){
  50. isr.close();
  51. }
  52. if(is!=null){
  53. is.close();
  54. }
  55. if(so!=null){
  56. so.close();
  57. }
  58. if(os!=null){
  59. os.close();
  60. }
  61. if(socket!=null){
  62. socket.close();
  63. }
  64. } catch (Exception e2) {
  65. e2.printStackTrace();
  66. }
  67. }
  68. }
  69. }

8、优化,利用面向对象以及序列化和反序列化实现

User

  1. package cn.bdqn.web.TCP2;
  2. import java.io.Serializable;
  3. public class User implements Serializable {
  4. private String name;
  5. private String pwd;
  6. public User(){
  7. }
  8. public User(String name, String pwd) {
  9. this.name = name;
  10. this.pwd = pwd;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public String getPwd() {
  19. return pwd;
  20. }
  21. public void setPwd(String pwd) {
  22. this.pwd = pwd;
  23. }
  24. }

线程

  1. package cn.bdqn.web.TCP2;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.ObjectInputStream;
  7. import java.io.OutputStream;
  8. import java.net.Socket;
  9. public class LoginThread extends Thread {
  10. Socket socket = null;
  11. //构造LoginThread 将socket对象传递进线程
  12. public LoginThread(Socket socket){
  13. this.socket = socket;
  14. }
  15. @Override
  16. public void run() {
  17. InputStream is = null;
  18. InputStreamReader isr = null;
  19. BufferedReader br = null;
  20. OutputStream os = null;
  21. ObjectInputStream ois = null;
  22. try {
  23. String reply = "";
  24. is = socket.getInputStream();
  25. ois = new ObjectInputStream(is);
  26. User user = (User)ois.readObject();
  27. if (user != null) {
  28. System.out.println(user.getName());
  29. System.out.println(user.getPwd());
  30. if ("TOM".equals(user.getName()) && "123456".equals(user.getPwd())) {
  31. reply = "登录成功,欢迎您";
  32. } else {
  33. reply = "登录失败,用户名或密码错误";
  34. }
  35. }
  36. // isr = new InputStreamReader(is);
  37. // br = new BufferedReader(isr);
  38. // String info = null;
  39. // while( (info = br.readLine()) != null){
  40. // System.out.println("我是服务器接收到:" + info);
  41. // }
  42. //服务器的回复
  43. os = socket.getOutputStream();
  44. //String reply = "登录成功,欢迎您";
  45. os.write(reply.getBytes());
  46. socket.shutdownOutput();
  47. } catch (Exception e){
  48. e.printStackTrace();
  49. } finally{
  50. try {
  51. if (ois !=null){
  52. ois.close();
  53. }
  54. if (br != null){
  55. br.close();
  56. }
  57. if (isr != null){
  58. isr.close();
  59. }
  60. if (is != null){
  61. is.close();
  62. }
  63. if (os != null){
  64. os.close();
  65. }
  66. }catch (IOException e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. }
  71. }

客户端

  1. package cn.bdqn.web.TCP2;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.ObjectOutputStream;
  7. import java.io.OutputStream;
  8. import java.net.Socket;
  9. import java.net.UnknownHostException;
  10. /*
  11. * 客户端
  12. */
  13. public class LoginClient {
  14. public static void main(String[] args) {
  15. Socket socket = null;
  16. OutputStream os = null;
  17. InputStream is = null;
  18. InputStreamReader isr = null;
  19. BufferedReader br = null;
  20. ObjectOutputStream oos = null;
  21. try {
  22. socket = new Socket("localhost",8801);
  23. os = socket.getOutputStream();
  24. User user = new User("TOM", "123456");
  25. oos = new ObjectOutputStream(os);
  26. oos.writeObject(user);
  27. //String info = "我的姓名是:TOM,我的密码是:123456";
  28. //os.write(info.getBytes());
  29. socket.shutdownOutput();
  30. //接收服务器的回复信息
  31. is = socket.getInputStream();
  32. isr = new InputStreamReader(is);
  33. br = new BufferedReader(isr);
  34. String reInfo = null;
  35. while( (reInfo = br.readLine()) != null){
  36. System.out.println("客户端接收的信息为:" + reInfo);
  37. }
  38. } catch (UnknownHostException e) {
  39. e.printStackTrace();
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. } finally{
  43. try {
  44. if (oos != null){
  45. oos.close();
  46. }
  47. if (os != null) {
  48. os.close();
  49. }
  50. if (br != null){
  51. br.close();
  52. }
  53. if (isr != null){
  54. isr.close();
  55. }
  56. if (is != null){
  57. is.close();
  58. }
  59. if (socket != null){
  60. socket.close();
  61. }
  62. } catch (IOException e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. }
  67. }

服务器端

  1. package cn.bdqn.web.TCP2;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStream;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. public class LoginServer {
  10. /*
  11. * 服务器
  12. */
  13. public static void main(String[] args) {
  14. ServerSocket serverSocket = null;
  15. Socket socket = null;
  16. try {
  17. serverSocket = new ServerSocket(8801);
  18. while(true){
  19. //accept 等待客户端发送数据 进行通信
  20. socket = serverSocket.accept();
  21. Thread t = new LoginThread(socket);
  22. t.start();
  23. Thread.sleep(200);
  24. }
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. } finally{
  30. try {
  31. if (socket != null){
  32. socket.close();
  33. }
  34. if (serverSocket != null){
  35. serverSocket.close();
  36. }
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }
  42. }

9、TCP和UDP的区别?

image.png

二、测试

  1. package cn.bdqn.test;
  2. import org.junit.After;
  3. import org.junit.Before;
  4. import org.junit.BeforeClass;
  5. import org.junit.Ignore;
  6. import org.junit.Test;
  7. import cn.bdqn.thread.MyThread;
  8. /*
  9. * 测试
  10. */
  11. public class JunitDemo {
  12. //在test之前输出
  13. int i=0;
  14. @Before
  15. public void before(){
  16. i=100;
  17. System.out.println("--before--");
  18. }
  19. @Test
  20. public void test(){
  21. System.out.println(i+j);
  22. }
  23. @Test
  24. public void test1(){
  25. //使用Junit测试框架执行程序,当前线程运行完成即关闭,子线程也会关闭
  26. //观察结果需延长当前线程的运行时间来保证线程不会关闭
  27. Thread t1=new MyThread();
  28. t1.start();
  29. try {
  30. Thread.sleep(1000);
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }
  34. // System.out.println("test1");
  35. }
  36. //在test之后输出
  37. @After
  38. public void after(){
  39. System.out.println("--after--");
  40. }
  41. int j=0;
  42. @Ignore//不参与测试的方法
  43. public void ignore(){
  44. j=50;
  45. // System.out.println("--ignore--");
  46. }
  47. // @BeforeClass
  48. // public void BC(){
  49. // System.out.println("--BeforeClass--");
  50. // }
  51. //
  52. }

三、XML存储数据

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <books>
  3. <!-- 图书信息 -->
  4. <book id="bk101">
  5. <author>&lt;王珊&gt;</author>
  6. <title>.NET高级编程</title>
  7. <description><![CDATA["包含C#框架和网络编程等"&<''>]]></description>
  8. </book>
  9. <book id="bk102">
  10. <author>李明明</author>
  11. <title>XML基础编程</title>
  12. <description>包含XML基础概念和基本作用</description>
  13. </book>
  14. </books>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <students>
  3. <score name="王显明">
  4. <!--
  5. <name>王显明</name>
  6. -->
  7. <estimateScore>75</estimateScore>
  8. <actualScore>80</actualScore>
  9. </score>
  10. <score name="宋佳">
  11. <!--
  12. <name>宋佳</name>
  13. -->
  14. <estimateScore>75</estimateScore>
  15. <actualScore>88</actualScore>
  16. </score>
  17. </students>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <phonrInfo>
  3. <brand name="华为">
  4. <type>Mate30</type>
  5. <type>P30</type>
  6. </brand>
  7. <brand name="苹果">
  8. <type>iPhone 12</type>
  9. <type>iPhone 12pro</type>
  10. </brand>
  11. </phonrInfo>

四、DOM4J解析XML

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <phonrInfo>
  3. <brand name="华为">
  4. <type>Mate30</type>
  5. <type>P30</type>
  6. </brand>
  7. <brand name="苹果">
  8. <type>iPhone 12</type>
  9. <type>iPhone 12pro</type>
  10. </brand>
  11. </phonrInfo>

1、加载
2、展示
3、修改-增加:element和修改:setText()
4、保存到文件
5、删除部分

  1. package cn.bdqn.XML;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.Iterator;
  6. import org.dom4j.Document;
  7. import org.dom4j.DocumentException;
  8. import org.dom4j.Element;
  9. import org.dom4j.io.OutputFormat;
  10. import org.dom4j.io.SAXReader;
  11. import org.dom4j.io.XMLWriter;
  12. public class Dom4JTest {
  13. public static void main(String[] args) {
  14. Dom4JTest dt=new Dom4JTest();
  15. //加载完成 固定的
  16. Document doc=dt.loadXml("src/cn/bdqn/XML/phone.xml");//传入xml文件路径
  17. //迭代器遍历展示
  18. // dt.showDoc(doc);
  19. dt.modifyDoc(doc);//新增小米
  20. dt.saveDoc(doc, "src/cn/bdqn/XML/phone2.xml");//保存并生成到当前目录下
  21. dt.removeDoc(doc);
  22. dt.saveDoc(doc, "src/cn/bdqn/XML/phone3.xml");//保存并生成到当前目录下
  23. System.out.println("执行成功");
  24. }
  25. //删除部分数据
  26. public void removeDoc(Document doc){
  27. //获得顶层元素,固定的
  28. Element root=doc.getRootElement();
  29. //遍历找到删除的位置
  30. Iterator<Element> it1=root.elementIterator();
  31. while(it1.hasNext()){
  32. Element e1=it1.next();
  33. Iterator<Element> it2=e1.elementIterator();
  34. a:while(it2.hasNext()){
  35. Element e2=it2.next();
  36. if(e2.getText().equals("Mate30")){
  37. //修改元素名称
  38. e2.setText("Mate40");
  39. //删除元素,用父元素删除子元素
  40. // e1.remove(e2);
  41. // e2.getParent().remove(e2);
  42. break a;
  43. }
  44. }
  45. }
  46. }
  47. //修改完成保存到文件中
  48. public void saveDoc(Document doc,String path){
  49. //设置编码,固定的
  50. OutputFormat opf=OutputFormat.createPrettyPrint();
  51. opf.setEncoding("GBK");//填入平台编码
  52. XMLWriter writer=null;
  53. try {
  54. //固定格式
  55. writer=new XMLWriter(new FileWriter(path),opf);
  56. writer.write(doc);
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }finally{
  60. if(writer!=null){
  61. try {
  62. writer.close();
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. }
  68. }
  69. //修改文件
  70. public void modifyDoc(Document doc){
  71. //获得顶层元素,固定的
  72. Element root=doc.getRootElement();
  73. //新增
  74. Element newElement=root.addElement("brand");
  75. //加一个name属性
  76. newElement.addAttribute("name", "小米");
  77. //内部还要建type
  78. Element type1=newElement.addElement("type");
  79. type1.setText("mi-11");
  80. Element type2=newElement.addElement("type");
  81. type2.setText("redmik40");
  82. //修改完成保存到文件中
  83. }
  84. //(展示)根据加载的文档输出内容
  85. public void showDoc(Document doc){
  86. //获得文档顶层元素phoneInfo,拿到顶层才能获得以后的底层
  87. Element root=doc.getRootElement();
  88. Iterator<Element> it1=root.elementIterator();
  89. //迭代器遍历
  90. while(it1.hasNext()){
  91. //e1相当于拿到了品牌
  92. Element e1=it1.next();
  93. //获得名字
  94. String name=e1.attributeValue("name");
  95. System.out.println(name);
  96. //遍历型号
  97. Iterator<Element> it2=e1.elementIterator();
  98. while(it2.hasNext()){
  99. Element e2=it2.next();
  100. System.out.println("---"+e2.getText());
  101. }
  102. }
  103. }
  104. /*
  105. * 加载XML文档,读取文件返回document文档对象。
  106. */
  107. //子方法,加载XML文件
  108. public Document loadXml(String filePath){//传入路径
  109. SAXReader reader=new SAXReader();
  110. Document doc=null;
  111. try {
  112. doc=reader.read(new File(filePath));
  113. } catch (DocumentException e) {
  114. e.printStackTrace();
  115. }
  116. return doc;
  117. }
  118. }