问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java_网络编程

发布网友 发布时间:2024-09-27 04:21

我来回答

1个回答

热心网友 时间:2024-10-23 16:35

@[TOC]

网络编程

网络编程目的: 无线电接收,通信,连接数据交换 共享

网络通信的两大要素:

通信双方的IP地址+端口号

通信协议(FTP文件传输协议,SMTP发送邮件,TCP,UDP,HTTP)。实际上主要学习的是TCP/IP协议簇中传输层的TCP和UDP协议

一、通信双方的IP地址+端口号1、IP地址

对于Java来说集中于InetAddress类包下:唯一定位一台网络上的计算机

IP地址:eg:127.0.0.1 ? ? ?196.168.0.1

IP分类:IPV4/IPV6、公网/私网

IPV4

eg:127.0.0.1 ?4个字节32位组成,长度0-255

IPV4的IP地址分类:

IP地址由四段组成,地址长度为32位,共4个字节,每个字段是一个字节(Byte)即8位二进制,最大值是255。实际中我们用“点分十进制记法”。

IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。

A类:0.0.0.0-127.255.255,其中段0和127不可用

B类: 128.0.0.0-191.255.255.255 ? 63

C类:192.0.0.0-223.255.255.255 ? ?31

D类: 224.0.0.0-239.255.255.255 ? ?15

IPV6

查看本机IPV6地址命令:ipconfig

本地链接 IPv6 地址. . . . . . . . : fe80::4cfb:8b05:9334:39d7%5 128位,8个无符号整数

公网——互联网

私网——也叫内网,有家庭局域网、校园网

import java.net.InetAddress;import java.net.UnknownHostException;public class ip地址 {public static void main(String[] args) throws UnknownHostException {//返回本地主机地址// .getByName("localhost"),.getByName("127.0.0.1")InetAddress ip = InetAddress.getByName("localhost");InetAddress ip_simple = InetAddress.getLocalHost();InetAddress ip1 = InetAddress.getByName("127.0.0.1");System.out.println("ip:"+ip);InetAddress ip2 = InetAddress.getByName("198.168.0.1");System.out.println("ip2:"+ip2);//查询网站地址InetAddress ip3 = InetAddress.getByName("www.baidu.com");System.out.println("ip3:"+ip3);//常用方法System.out.println(ip2.getCanonicalHostName()); //获取此IP地址的完全限定域名。String,198.168.0.1System.out.println(ip2.getHostAddress()); //返回文本显示中的IP地址字符串String,198.168.0.1System.out.println(ip2.hashCode()); //返回此IP地址的哈希码。int,-962068479System.out.println(ip2.getAddress()); //返回此 InetAddress对象的原始IP地址。byte[],[B@49097b5dSystem.out.println(ip2.getHostName());//获取此IP地址的主机名。String,198.168.0.1}}2、端口号

InetSocketAddress类下:端口表示计算机上一个程序的进程,不同进程有不同的端口号,范围0-65535

端口分类:共有端口、程序注册端口、动态私有端口

共有端口??范围0-1023

HTTP:80

HTTPS:443

FTP:21

Telnet:23

程序注册端口??范围1024-49151:分配给用户和进程使用

Tomcat:8080

MySQL:3306

Oracle:1521

IDEA:63342

动态私有端口??范围49152-65535

可以用netstat -ano ?查看全部端口连接情况

netstat -ano|findstr "端口号" ? ?查看指定端口号的连接

import java.net.InetSocketAddress;public class 端口号 {public static void main(String[] args) {InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1",8080);InetSocketAddress inetSocketAddress1 = new InetSocketAddress("localhost",8080);System.out.println("inetSocketAddress:" + inetSocketAddress);System.out.println("inetSocketAddress1" + inetSocketAddress1);System.out.println(inetSocketAddress.getAddress()); //返回此 InetAddress对象的原始IP地址。System.out.println(inetSocketAddress.getHostName());//获取主机名,在.host文件中设置的System.out.println(inetSocketAddress.getPort());//获取端口号}}二、通信协议

实际上主要学习的是TCP/IP协议簇中传输层的TCP和UDP协议

TCP:用户传输协议

相当于打电话,面向连接的稳定的传输控制协议

经典的三次握手四次挥手【请自行百度】

传输完成,释放连接效率低

//TCP实现聊天 服务器端;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;/** * 服务器端等待客户端连接 */public class server {public static void main(String[] args) throws IOException {//1.服务器先有地址端口号,ServerSocket//2.让客户端getServerSocket serverSocket = new ServerSocket(9999);//等待客户端连接,acceptSocket socket = serverSocket.accept();//读取客户信息,ioInputStream is = socket.getInputStream();//读入流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer)) != -1){byteArrayOutputStream.write(buffer,0,len);}System.out.println(byteArrayOutputStream.toString());//关闭流byteArrayOutputStream.close();is.close();socket.close();serverSocket.close();}}//TCP实现聊天 客户端;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;/** * 客户端主动发起连接,发送消息 */public class client {public static void main(String[] args) throws IOException {//1.客户端获取地址+端口号定位通信InetAddress ip = InetAddress.getByName("127.0.0.1");int port = 9999;//2.创建Socket连接Socket socket = new Socket(ip, port);//3.发送消息,io流OutputStream os = socket.getOutputStream();//发送流os.write("欢迎使用本公司智能语音小电!".getBytes());//4.关闭流os.close();socket.close();}}//TCP文件上传 服务器端;import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class server {public static void main(String[] args) throws IOException {//创建服务//监听等待客户端的连接//获取输入流//文件输出//创建服务ServerSocket serverSocket = new ServerSocket(9090);//等待客户端的连接Socket accept = serverSocket.accept();//获取输入流InputStream is = accept.getInputStream();//文件输出FileOutputStream fileOutputStream = new FileOutputStream(new File("ssl.jpg"));byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer)) != -1){fileOutputStream.write(buffer,0,len);}//通知客户端,我已经接收完毕OutputStream os = accept.getOutputStream();os.write("我已经接收完毕,你可以断开了!".getBytes());//关闭资源os.close();fileOutputStream.close();is.close();accept.close();serverSocket.close();}}//TCP文件上传 客户端;import java.io.*;import java.net.InetAddress;import java.net.Socket;public class client {public static void main(String[] args) throws Exception {//创建socket连接//创建一个输入流//读取要输入的文件//写入文件//关闭资源//创建socket连接Socket socket = new Socket(InetAddress.getByName("196.168.0.1"), 9090);//创建一个输入流OutputStream os = socket.getOutputStream();//读取文件FileInputStream fileInputStream = new FileInputStream(new File("xixi.jpg"));//写出文件byte[] buffer = new byte[1024];int len;while ((len=fileInputStream.read(buffer)) != -1){os.write(buffer,0,len);}//通知服务器,我已经结束了socket.shutdownOutput();//确定服务器也已经接收完毕,才断开连接InputStream inputStream = socket.getInputStream();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] buffer2 = new byte[2014];int len2;while ((len2=inputStream.read(buffer2)) != -1){byteArrayOutputStream.write(buffer2,0,len2);}System.out.println(byteArrayOutputStream.toString());//关闭资源fileInputStream.close();inputStream.close();byteArrayOutputStream.close();os.close();socket.close();}}

UDP:用户数据报协议

发短信,定位发送,不管实际有没有发送到

//UDP消息发送 server;import java.net.DatagramPacket;import java.net.DatagramSocket;public class server_消息发送 {public static void main(String[] args) throws Exception {//1.开放端口,2.接收数据包//开放端口DatagramSocket socket = new DatagramSocket(7777);//接收数据报byte[] bytes = new byte[1024];DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);socket.receive(packet);//阻塞接收,没有输出//输出System.out.println(packet.getAddress().getHostAddress());System.out.println(new String(packet.getData(),0,packet.getLength()));//关闭资源socket.close();}}//UDP消息发送 client;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class client_消息发送 {public static void main(String[] args) throws Exception {//建立一个Socket//建立包//发送包//建立一个SocketDatagramSocket socket = new DatagramSocket();//建立包String msg = "hello message is sending!";InetAddress localhost = InetAddress.getByName("localhost");int port = 7777;DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);//发送包socket.send(packet);//关闭资源socket.close();}}

另外

IP协议:网络互连协议

HTTP:超文本传输协议

HTTPS:比HTTP更安全

TELNET:远程控制协议

SMTP:邮件传输协议

FTP:文件传输协议

DHCP:动态主机配置协议

ICMP:消息控制协议

ARP:地址解析协议

三、URL

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

语法规则:一个网页地址实例: ?http://www.runoob.com/html/html-tutorial.html)

scheme://host.domain:port/path/filename

语法规则: ?协议://主机:端口号/路径/文件名

//URL统一资源定位符;import java.net.MalformedURLException;import java.net.URL;public class URL_get {public static void main(String[] args) throws MalformedURLException {URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password=123");System.out.println(url.getProtocol());//协议System.out.println(url.getPort());//端口System.out.println(url.getPath());//全路径System.out.println(url.getFile());//文件System.out.println(url.getQuery()); //参数System.out.println(url.getHost());//主机ip}}

用URL爬音乐文件

import java.net.InetAddress;import java.net.UnknownHostException;public class ip地址 {public static void main(String[] args) throws UnknownHostException {//返回本地主机地址// .getByName("localhost"),.getByName("127.0.0.1")InetAddress ip = InetAddress.getByName("localhost");InetAddress ip_simple = InetAddress.getLocalHost();InetAddress ip1 = InetAddress.getByName("127.0.0.1");System.out.println("ip:"+ip);InetAddress ip2 = InetAddress.getByName("198.168.0.1");System.out.println("ip2:"+ip2);//查询网站地址InetAddress ip3 = InetAddress.getByName("www.baidu.com");System.out.println("ip3:"+ip3);//常用方法System.out.println(ip2.getCanonicalHostName()); //获取此IP地址的完全限定域名。String,198.168.0.1System.out.println(ip2.getHostAddress()); //返回文本显示中的IP地址字符串String,198.168.0.1System.out.println(ip2.hashCode()); //返回此IP地址的哈希码。int,-962068479System.out.println(ip2.getAddress()); //返回此 InetAddress对象的原始IP地址。byte[],[B@49097b5dSystem.out.println(ip2.getHostName());//获取此IP地址的主机名。String,198.168.0.1}}0原文:https://juejin.cn/post/7100235927565369380
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中美有什么经济冲突 杨凌衡水实验中学高中学费是多少 蒂芙尼珍珠项链怎么清洗和保养? tiffany&co 的缺点 如何保养蒂芙尼的项链? tiffany保养要多久时间 Tiffany珠宝需要多长时间保养? 人为什么活着,怎样活着都是无憾!! 孩子犟的不行家长怎么教育 有什么比较好用的游戏视频录制软件? 适用于Windows的10个好用的游戏录制软件 ...就想问还要什么itunes或者注册app store账户吗? 有关今天七夕适合发的朋友圈说说的短句子(七夕浪漫夜,留下美好时光... 有关七夕朋友圈说说简单的好句子(用一句话,诠释爱情) 有关七夕朋友圈情话最暖心的句子有哪些(用短句表达真情,为朋友圈增添... 七夕的浪漫句子? 英国留学签证存款证明问题,活期可以吗 我好累,好想休息。但是很多事情让我放不下,让我如何是好? 真的活的好累,怎么办 ,,,不知道什么时候才可以过自己想要的生活,我到底... 迷茫中徘徊,徘徊中犹豫,犹豫中绝望,我到底该怎么办?真的想放弃自己~这... 短烫发想留长发,如何清凉过夏日 同一个物体,站在不同位置看到的物体形状都是不一样的,这是对还是错? 从石龙仔三民工业园,坐几路公交到欣旺达股份有限公司门口?谢啦_百度知 ... 中秋节没回去团圆的说说 风什么雨什么四字词语 衣服汗臭味很重怎么清除-衣服怎么洗都有股汗味怎么办 高级战争 毁灭之日 司令塔有什么用? 高级战争ds双重打击存档 高级战争双重打击指挥官获得方式 莱芜吐丝口战役成果 构成销售公民个人信息罪既遂如何处罚 飞机票返点是什么 负责给公司预定机票,收机票反点,是否违法? 一张机票,能赚多少利润? Allotment 是什么释义呢?? 关于飞机票黑票点问题? Overallotment是什么意思呢? 山东省农业机械化促进条例如何进行农业机械产品质量、维修质量和作业质... 求教:会计中的“计提”的英文应该怎么说,“本年计提数”的英文呢? 农业机械维修管理规定总则 老公三番两次出轨怎么办? ...一定是正方形的立体图形是( )A.正方形B.长方体C.正方 第一夫人皮草能挣多少钱 分析下列说法,其中不正确的是( )A.长方体、正方体都是直棱柱B.球体的... 第一夫人皮草官网骗了我钱,怎么办呢? 下列图形中不是立体图形的是( ) A. 球 B. 圆 C. 棱柱 D. 长方体 如图所示的长方体,从不同的方向看得到的图形是( )A.三个相同的长方形B... 下列物体中,形状不是长方体的是( )A.火柴盒B.课本C.茶杯 ...沿虚线所示位置截下去所得到的截面图形是( )A.B.C.D 黄瓜酱菜的制作方法 小调查!大家在学生时代有没有喜欢过自己的同桌呢?