JAVA网络编程实战(笔记)

计算机网络简介

网络编程的目的:

无限电台。。。。传播交流信息,数据交换。通信

想要达到这个效果需要什么:

1.如何准确的定位网络上的一台主机 ip地址192.168.16.124: 端口,定位到这个计算机上的某个资源

2.找到了这个主机,如何传输数据

Javaweb: 网页编程 B/s Brower/Server(浏览器/服务器)架构

网络编程:TCP/IP C/S Client/Server(客户端/服务器)

网络通信的要素

如何实现网络的通信?

通信双方地址:

  • IP

  • 端口号

  • 192.168.16.124::5900

  • 规则:网络通信的协议

    TCP/IP

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bCCN96B-1608736331564)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223163659380.png)]

    小结:

    1.网络编程中有两个主要的问题

    • 如何准确的定位到网络上的一台或多台主机
    • 找到主机之后如何进行通信

​ 2.网络编程中的要素

​ IP和端口号 IP

​ 网络通信协议 udp tcp

万物皆对象

IP地址

ip地址:inteAddress 查看本地cmd ipconfig

  • 唯一定位一台网络上计算机

  • 127.0.0.1:本机localhost

  • ip地址的分类

    • ipv4/Ipv6

      • ipv4 127.0.0.1 4个字节组成。 0~255 42亿个
      • ipv6 fe80::60f8:dddd:6bea:17a7%5 ,128位。8个无符号整数!
    • 公网(互联网)-私网(局域网)

      • ABCD类地址

      • 192.168.xx.xx,专门给组织内部使用的

    package com.kuang.demo1;import java.net.InetAddress;
    import java.net.UnknownHostException;public class TestInetAddress {public static void main(String[] args) {try {InetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost);InetAddress[] inetAddress1 = InetAddress.getAllByName("127.0.0.1");System.out.println(inetAddress1);System.out.println(InetAddress.getByName("localhost"));InetAddress inetAddress = InetAddress.getByName("www.baidu.com");System.out.println(inetAddress);} catch (UnknownHostException e) {e.printStackTrace();}}}
    

端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cs9DwFkt-1608736331566)(D:\image-20201223185145889.png)]

etstat -ano #查看所有的窗口
netstat -ano|findstr"5900" #查看指定的端口
taskList|findstr "8696" #查看指定端口的进程
ctrl+shift+Esc  

通信协议

网络通信协议:速率,传输码率,代码结构,传输控制…

TCP/IP协议簇:实际上是一组协议

重要:

  • TCP:用户传输协议
  • UDP:用户数据报协议

出名的协议:

  • TCP:
  • IP:网络互连协议

TCP和UDP对比

TCP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MedDcwVh-1608736331567)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223192731408.png)]

UDP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aVKxdpRv-1608736331569)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223192810022.png)]

TCP实现聊天

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ssdtBAu3-1608736331571)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223202354809.png)]

package com.kuang.demo02;import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpClientDemo01 {public static void main(String[] args) throws Exception {Socket socket=null;OutputStream os=null;try {InetAddress serverIP = InetAddress.getByName("127.0.0.1");int port=9999;socket = new Socket(serverIP, port);os = socket.getOutputStream();os.write("asdfdasfdsa".getBytes());} catch (IOException e) {e.printStackTrace();}finally {os.close();socket.close();}}}
package com.kuang.demo02;import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerDemo01 {public static void main(String[] args) throws Exception {ServerSocket serverSocket=null;Socket socket=null;InputStream is=null;ByteArrayOutputStream baos=null;//1.创建服务try {serverSocket = new ServerSocket(9999);//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 {//关闭资源baos.close();is.close();socket.close();serverSocket.close();}}}

TCP实现文件上传

package com.kuang.demo02;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpClientDemo01 {public static void main(String[] args) throws Exception {//1.创建一个Socket连接Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);//2.创建一个输出流OutputStream os = socket.getOutputStream();//3.读取文件FileInputStream fis = new FileInputStream(new File("1.png"));//4.写出文件byte[] buffer=new byte[1024];int len;while ((len=fis.read(buffer))!=-1){os.write(buffer,0,len);}//通客户端已经接受完了OutputStream outputStream = socket.getOutputStream();outputStream.write("我已经接收完了,可以断开了".getBytes());//5.关闭资源fis.close();os.close();socket.close();}
}
package com.kuang.demo02;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerDemo01 {public static void main(String[] args) throws Exception {//1.创建服务ServerSocket serverSocket = new ServerSocket(9000);//2.监听客户端的连接Socket socket = serverSocket.accept();//阻塞式监听,会一直等待客户端连接//3.获取输入流InputStream is = socket.getInputStream();//4.文件输出FileOutputStream fos = new FileOutputStream(new File("receive.png"));byte[] buffer=new byte[1024];int len;while ((len=is.read(buffer))!=-1){fos.write(buffer,0,len);}//关闭资源fos.close();is.close();socket.close();serverSocket.close();}
}

初始Tomacat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bfRcXMKH-1608736331573)(D:\image-20201223211354080.png)]

tomacat乱码问题解决

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fnBL00Ta-1608736331573)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223212231847.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAcUE7Nb-1608736331574)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223212203132.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qi1waKcv-1608736331574)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223212613753.png)]

UDP消息发送

byte转化为string用构造器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l5w02V5O-1608736331575)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223214550066.png)]

发送信息

package com.kuang.demo03;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpClientDemo01 {public static void main(String[] args) throws Exception {//建立SocketDatagramSocket socket=new DatagramSocket();//打包数据包String msg="hello";InetAddress address=InetAddress.getByName("localhost");int port=9090;DatagramPacket packet=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,address,port);socket.send(packet);socket.close();}
}
package com.kuang.demo03;import java.net.DatagramPacket;
import java.net.DatagramSocket;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();}
}

在线咨询

{DatagramSocket socket=null;private int port;private  String msgFrom;public TalkReceive(int port,String msgFrom) {this.port=port;this.msgFrom=msgFrom;try {socket=new DatagramSocket(port);} catch (SocketException e) {e.printStackTrace();}}@Overridepublic void run() {while (true) {try {byte[] container = new byte[1024];DatagramPacket packet= new DatagramPacket(container, 0,container.length);socket.receive(packet);byte[] data=packet.getData();String receiveData=new String(data,0,data.length);System.out.println(msgFrom+ ":" +receiveData);if (receiveData.equals("bye") ) {break;}} catch (IOException e) {e.printStackTrace();}}socket.close();}
}
package com.kuang.demo03;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;public class TalkSend implements Runnable{DatagramSocket socket=null;BufferedReader reader=null;private int fromPort;private String toIP;private int toport;public TalkSend(int fromPort, String toIP, int toport) {this.fromPort = fromPort;this.toIP = toIP;this.toport = toport;try {socket=new DatagramSocket(fromPort);reader=new BufferedReader(new InputStreamReader(System.in));} catch (Exception e) {e.printStackTrace();}}@Overridepublic void run() {while(true){try {String data=reader.readLine();byte[] datas=data.getBytes();DatagramPacket packet= new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toport));socket.send(packet);if (data.equals("bye")){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();}
}
package com.kuang.demo03;
public class TalkStudent {public static void main(String[] args) {new Thread(new TalkSend(7777,"localhost",9999)).start();new Thread(new TalkReceive(8888,"老师")).start();}}
package com.kuang.demo03;public class TalkTeacher {public static void main(String[] args) {new Thread(new TalkSend(5555,"localhost",8888)).start();new Thread(new TalkReceive(9999,"学生")).start();}
}

URL下载网络资源

统一资源定位符:定位资源,定位互联网上某一个资源

DNS域名解析 WWW.baidu 解析成xxx.xx.x.x

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PULcLLfK-1608736331576)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201223224441775.png)]

eg:https://mp.csdn.net/console/home?spm=1001.2101.3001.4503

package com.kuang.demo04;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;public class URLDemo01 {public static void main(String[] args) throws IOException {URL url = new URL("https://www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg");HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();InputStream in = urlConnection.getInputStream();FileOutputStream Fout = new FileOutputStream("1.svg");byte[] buff = new byte[1024];int len;while ((len = in.read(buff)) != -1) {Fout.write(buff, 0, len);}Fout.close();in.close();urlConnection.disconnect();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让 Java 应用运行更快:性能调优工具及实践

转载自 让 Java 应用运行更快:性能调优工具及实践Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层。通过介绍 Java 性能诊断工具和思路,给…

github 公钥 私钥_github快速使用

##第一次使用github推荐方式Git第一步:下载git工具,这里是链接,选择适合自己的版本进行安装。第二步:安装完成后,鼠标右键找到Git bash,双击打开。第三步:设置SSH key众所周知ssh是加密传输。加…

ASP.NET Core 之 Identity 入门(一)

前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OWIN的东西,所以很多初学者在学习来很费劲&…

蓝桥杯JAVA省赛2013-----B------2(马虎算式)

二、马虎的算式 【解析】&#xff1a;暴力穷举即可 枚举每个位上的数字、组合判断、暴力穷举 【答案】&#xff1a;142 方法一&#xff1a;暴力穷举 package com.kuang.Test; public class Test{public static void main(String[] args) {int ans 0;for(int a 1; a < …

简单解决“无法打开内核设备:\\Global\\vmx86”错误

简单解决“无法打开内核设备:\\Global\\vmx86”错误 本文链接&#xff1a;https://blog.csdn.net/tristan_tian/article/details/79434715 我是win10系统&#xff0c;在小娜搜索“服务”后右击选择使用管理员打开。然后在一大串服务中找到vm开头的服务项&#xff0c;全部都启…

按钮右对齐_Python Tkinter Button按钮

简介BUTTON小工具时使用的按钮添加到各种类型的Python应用&#xff0c;Python允许用户配置按钮的按我们的要求&#xff0c;各种选项可以被设置或重置的要求。BUTTON 小工具时使用的按钮添加到各种类型的Python应用。Python允许用户配置按钮的按我们的要求。各种选项可以被设置或…

Java 内存查看与分析

转载自 Java 内存查看与分析1&#xff1a;gc日志输出在jvm启动参数中加入 -XX:PrintGC -XX:PrintGCDetails -XX:PrintGCTimestamps -XX:PrintGCApplicationStopedTime&#xff0c;jvm将会按照这些参数顺序输出gc概要信息&#xff0c;详细信息&#xff0c;gc时间信息&#xff…

【长文干货】浅析分布式系统

测试开发者的共同关注&#xff01; 作者&#xff1a;wadehan&#xff0c;腾讯后台开发高级工程师 商业转载请联系腾讯WeTest获得授权&#xff0c;非商业转载请注明出处。 WeTest导读 我们常常会听说&#xff0c;某个互联网应用的服务器端系统多么牛逼&#xff0c;比如QQ、微信、…

hibernate配置详情2(Dept.hbm.xml)

<?xml version"1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package"org.hibernate_on…

Spring Boot 入门 IDEA 版本 2小时学会springBoot 代码上传至gitee 或者github 事务没做出来

SpringBoot简化了xml的配置可以快速开发&#xff0c;节省很多的时间&#xff0c;springboot的配置速度更快&#xff0c;SpringMvc已经不如springboot了&#xff0c; 市面上更多的是使用spingboot这个框架了。 springboot是springmvc的升级版&#xff0c;但是2者没有必然的联…

华为云微认证答题_158人次通过华为认证考试!今年,湖北这所高校频现大动作...

从2005全国职教工作会上"校企合作"的提出&#xff0c;到2013年"产教融合"的最早出现&#xff0c;再到党的十九大&#xff0c;"产教融合、校企合作"已经逐渐成为教育新趋势。相信有许多家长和大学生都很想了解这种新的教育模式。本期推送&#xf…

在传统.NET Framework 上运行ASP.NET Core项目

新的项目我们想用ASP.NET Core来开发&#xff0c;但是苦于我们历史的遗产很多&#xff0c;比如《使用 JavaScriptService 在.NET Core 里实现DES加密算法》&#xff0c;我们要估计等到.NET Core 1.2我们才会有大部分的API&#xff0c;通过NodeJs方式有点曲线救国的味道&#xf…

JVM 调优系列之图解垃圾回收

转载自 JVM 调优系列之图解垃圾回收摘要: jvm必知系列&#xff0c;总结一些常见jvm回收机制&#xff0c;方便查阅从这篇开始我们开始探讨一些jvm调优的问题。在jvm调优中一个离不开的重点是垃圾回收&#xff0c;当垃圾回收成为系统达到更高并发量的瓶颈时&#xff0c;我们就需…

JAVA注解和反射(笔记)

注解简介 Annotation是从JDK5.0开始引入的新技术). Annotation的作用 : 不是程序本身(可以对程序作出解释.(这一点和注释(comment)没什么区别)可以被其他程序(比如:编译器等)读取. Annotation的格式: 注解是以"注释名"在代码中存在的, 还可以添加一些参数值,例如:S…

车提示检测轮胎气压_水淹车估价中心_辽宁中车检

首页 > 新闻中心发布时间&#xff1a;2021-01-02 00:57:13 导读&#xff1a;辽宁中车检为您提供水淹车估价中心的相关知识与详情&#xff1a;在行车过程中,汽车受到振动,可能会引起前照灯部件的安装位置发生变动,从而改变光束的正确照射方向.同时,灯泡在使用过程中会逐步老化…

.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

0x00 为什么需要Map&#xff08;MapWhen&#xff09;扩展 如果业务逻辑比较简单的话&#xff0c;一条主管道就够了&#xff0c;确实用不到Map。不过当业务逻辑比较复杂的时候&#xff0c;有时候我们可能希望根据情况的不同使用特殊的一组中间件来处理HttpContext。这种情况下如…

2小时学习Spring Boot 2019版本 代码一样推送至github上面去

简介&#xff1a;《2小时学习Spring Boot》后续进阶课程&#xff0c;主要讲述了Spring Boot针对Web方面的相关技巧 讲师实战课程《Spring Boot微信点餐系统》 http://coding.imooc.com/class/117.html 《Spring Cloud微服务实战》 http://coding.imooc.com/class/187.html 均已…

认识JVM--第一篇-对象分配&回收算法

转载自 认识JVM--第一篇-对象分配&回收算法本来标题党想写成《深入JVM》&#xff0c;不过不太敢写&#xff0c;我想一小篇博客我想还不足以说明JVM&#xff0c;在本文中&#xff0c;会就我所知给大家介绍JVM的很多内部知识&#xff0c;概念会相对较粗&#xff0c;因为太细…