CUMT--Java复习--网络编程

目录

一、Java网络API

1、InetAddress类

2、URL类

3、URLConnection类

4、URLDecoder类和URLEncoder类

二、基于TCP的网络编程

1、Socket类

2、ServerSocket类

三、网络通信过程


一、Java网络API

        Java中有关网络方面的功能都定义在java.net中。

1、InetAddress类

        Java中使用InetAddress类封装IP地址或域名,InetAddress类没有构造方法,因此不能创建对象,一般采用下面的定义方法:

InetAddress localip=InetAddress.getLocalHost();        利用类内方法

        在使用调用网络api时,注意要添加异常机制,异常对象使用IOException,大多数异常都继承于输入输出流异常。

        InetAddress常用方法:

        调用上述方法的实例:

        注意,对于特定域名,以及特定ip的不同初始化的方法,byte要小写。

import java.io.IOException;
import java.net.*;
public class api {public static void main(String[] args){try{InetAddress localip=InetAddress.getLocalHost();System.out.println(localip.getHostName());              //主机名字System.out.println(localip.getCanonicalHostName());     //全限定域名System.out.println(localip.getHostAddress());           //主机对应ipSystem.out.println(localip.toString());                 //将ip和名字结合的show方法System.out.println(localip.isReachable(5000));  //ping一下ipSystem.out.println("-----------------------");InetAddress baidu=InetAddress.getByName("www.baidu.com");System.out.println(baidu.toString());System.out.println(baidu.isReachable(5000));System.out.println("-----------------------");InetAddress orient=InetAddress.getByAddress(new byte[]{127,0,0,1}); //注意这种写法System.out.println(orient.toString());System.out.println(orient.isReachable(5000));}catch(IOException e){e.printStackTrace();}}
}

2、URL类

         URL表示互联网某一资源的地址,由协议名、主机、端口和资源四个部分组成,语法如下:

protocol://host:port/resourceName

        Java将URL封装成URL类,通过URL对象调用方法,可以获取URL的内部信息,就是拆解URL,而不是去访问URL。(URL在jdk 20版本已经被删掉了)

3、URLConnection类

         URLConnection代表与URL指定的数据源的动态连接,允许使用POST或PUT和其他HTTP请求方法将数据送回服务器。

        URLConnection常用方法:

        下面代码实例为访问网站,并将网站信息写在txt文件:

         其中,先运用IO的知识,通过File类确定是否存在保存文件1.txt若没有则生成该文件。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;public class url {public static void main(String[] args){//不存在文件则创建一个文件File file=new File("src/net/1.txt");try{file.createNewFile();}catch(IOException e){e.printStackTrace();}//访问网址,并写入文件FileWriter fw=null;try{URL url=new URL("https://blog.csdn.net/m0_60177079/article/details/135175601?spm=1001.2014.3001.5501");URLConnection urlc=url.openConnection();urlc.setRequestProperty("Char", "UTF-8");BufferedReader br=new BufferedReader(new InputStreamReader(urlc.getInputStream()));String input;fw=new FileWriter("src/net/1.txt");while((input=br.readLine())!=null){fw.write(input);}}catch(IOException E){E.printStackTrace();}finally{try{fw.close();}catch(IOException e){e.printStackTrace();}}}
}

4、URLDecoder类和URLEncoder类

        存在非西欧字符串时系统会将字符串转换成application/x-www-form-urlencoded MIME字符串,相对比的为普通字符串,那么在这两者之间转换的方法就是URLDecoder类中的decode方法和URLEncoder类中的encode方法。

二、基于TCP的网络编程

        Java对于TCP网络通信提供了封装,使用Socket对象封装了通信两端的通信端口,Socket允许应用程序将网络连接当成一个IO流。

        Java.net中包含使用的两种Socket,ServerSocket(服务器套接字)和Socket(客户端套接字)

1、Socket类

        通过Socket类来连接服务器(当前文件作为客户端),构造方法如下:

Socket socket=new Socket("127.0.0.1",28888);

        Socket常用方法: 

        客户端通信具体步骤:

(1)创建一个Socket对象

(2)调用getOutputStream()方法,往Socket中写数据,一般使用new PrintStream(socket.getOutputStream()),并调用PrintStream的println方法输出到服务器端。

(3)调用getInputStream()方法,从Socket中读数据,一般用new BufferedReader(new InputStreamReader(socket.getInputStream())),通过调用BufferedReader的readline方法,返回服务器的信息,输出到客户端。

(4)客户端与服务器根据协议进行交互,直到关闭连接,期间可以对于PrintStream和BufferedReader所创建的ps和br对象进行flush操作,清除缓冲区。

(5)关闭客户端的Socket

2、ServerSocket类

        ServerSocket是服务器套接字,运行在服务器端,通过指定端口主动监听来自客户端的Socket连接。

        创建ServerSocket对象:

try{server=new ServerSocket(28888);
}
catch(IOException e)
{e.printStackTrace();
}

        服务器端需要继承于线程类,并在构造方法中,通过start方法,运行线程,并重新run方法。

        ServerSocket常用方法:

       根据ServerSocket进行网络通信的具体步骤:

(1)建立ServerSocket对象

(2)调用ServerSocket对象的accept()方法接收客户端发送的Socket对象

(3)调用getInputStream()方法,从Socket中读数据,一般用new BufferedReader(new InputStreamReader(socket.getInputStream())),通过调用BufferedReader的readline方法,返回服务器的信息,输出到服务器端。

(4)调用getOutputStream()方法,往Socket中写数据,一般使用new PrintStream(socket.getOutputStream()),并调用PrintStream的println方法输出到客户端。

(5)服务器与客户端根据一定的协议交互,知道关闭连接

(6)关闭服务器端的Socket

(7)回到第二步,重新监听下一次客户端发送的Socket请求连接。

三、网络通信过程

        使用Socket进行基于C/S架构的网络通信程序设计过程:

(1)服务器端通过某个端口监听是否有客户端发送Socket连接请求

(2)客户端向服务端发出一个Socket连接请求

(3)服务器端调用accept()接收客户端Socket并建立连接

(4)通过调用Socket对象的getInputStream()/getOutputStream()方法进行IO流操作,服务器与客户端进行信息交互

(5)关闭服务器端和客户端的Sokcet

        C/S过程代码:

        服务器端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread{ServerSocket server;int num=0;public Server(){                               //构造ServerSocket服务器端套接字类try{server=new ServerSocket(28888);}catch(IOException e){e.printStackTrace();}this.start();                              //线程启动System.out.println("Server start!");}public void run(){while(this.isAlive())                      //是否存在线程{BufferedReader br=null;PrintStream ps=null;try{Socket socket=server.accept();     //监听br=new BufferedReader(new InputStreamReader(socket.getInputStream()));    //向客户端输入String line=br.readLine();System.out.println(line);ps=new PrintStream(socket.getOutputStream());    //输出到服务器端ps.println("你是第"+(num++)+"个用户");ps.flush();br.close();ps.close();}catch(IOException e){e.printStackTrace();}       }}public static void main(String[] args){new Server();                                            //启动一个Server类}
}

        客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;public class Cilent {public static void main(String[] args){BufferedReader br=null;PrintStream ps=null;try{Socket socket=new Socket("127.0.0.1",28888);    //本机28888端口构造Socket套接字类ps=new PrintStream(socket.getOutputStream());   //输出到客户端ps.println("hello world!");ps.flush();br=new BufferedReader(new InputStreamReader(socket.getInputStream()));    //输入到服务器端String line=br.readLine();System.out.println("From Server:");System.out.println(line);br.close();ps.close();}catch(IOException e){e.printStackTrace();}}}

 

 参考书籍:《Java 8 基础应用与开发》QST青软实训编 

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

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

相关文章

windows dc linux,active-directory – Linux AD集成,使用Windows Server 2012 DC时无法登录

我正在尝试将我的CentOS 6.6服务器集成到Active Directory中.我使用配置3(SSSD / Kerberos / LDAP)遵循Red Hat的this指南.使用Windows Server 2008 R2服务器作为启用IMU的域控制器时,一切都运行良好.但是,当我使用启用了IMU的Windows Server 2012 R2服务器时,我能够获取kerber…

html table设置行高_html 表格单元格的宽度和高度的设置方法

做网页的时候,经常会碰到表格宽度对不齐的问题。详细地看了html中表格标签table的高度和宽度设置的细节,现总结如下:1、table中的width和height设置及其作用:table中设置的height其实是设置个最小值,也就是当表格中的内…

iOS懒加载

1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其getter方法。说的通俗一点,就是在开发中,当程序中需要利用的资源时。在程序启动的时候不…

linux promisc 作用,linux 下怎樣查看網卡是否支持混雜(promisc)模式

1,未設置支持promisc[rootbogon libpcap-1.3.0]# ifconfig eth0eth0: flags4163 mtu 1500inet 192.168.1.18 netmask 255.255.255.0 broadcast 192.168.1.255inet6 fe80::20c:29ff:fe90:90e9 prefixlen 64 scopeid 0x20ether 00:0c:29:90:90:e9 txqueuelen 10…

docker 发布tomcat项目_在docker中部署tomcat并且部署java应用程序的步骤详解

1、先说如何在docker中部署tomcat第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7;第二步:创建Dockerfile,命令如:touch …

Linux vi 行尾 ctrl,linux中vi使用技巧常用技巧和高级替换

linux中vi使用技巧常用技巧和高级替换模式切换:i,I 进入插入模式:i为从目前光标所在处插入;I为在目前所在列的第一个非空格的字符处开始插入。a,A 进入插入模式:a为从目前光标所在的下一个字符处开始插入…

c# 批量mqtt_C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)

MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)原创weixin_pwtank1983 发布于2018-02-03 10:22:24 阅读数 36681 收藏展开目录MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)MQTT(二)在windows64位上安装Python环境MQTT(三)Python客户端net客…

5月16日 AJAX

主页面&#xff1a; <head> <script src"../jquery-2.2.3.min.js"></script> </head><body> <div> <input type"text" id"uid" /><span id"xinxi"></span> </div> </…

linux signal 符号表6,gdb调试信息__000_linux-gnu_00000000_002_rw-p__169IT.COM

很少使用gdb调试&#xff0c;现在用了&#xff0c;又不知道是什么意思&#xff0c;求大侠指教*** glibc detected *** /home/hhbgk/url/url: free(): invalid next size (normal): 0x0809ac30 *** Backtrace: /lib/i386-linux-gnu/libc.so.6(0x6ff22)[0x1a0f22]/lib/i386-linux…

pyecharts查看版本_pyecharts v1 版本 学习笔记 折线图,面积图

折线图折线图 基本demoimport pyecharts.options as optsfrom pyecharts.charts import Linec (Line().add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]).add_yaxis(商家A, [1…

【Django】Django Debug Toolbar调试工具配置

正在发愁怎么调试Django&#xff0c;就遇到了Django Debug Toolbar这个利器。 先说遇到的问题&#xff1a; 网上也有教程&#xff0c;不过五花八门的&#xff0c;挨个尝试了一遍&#xff0c;也没有成功运行。最后终于找到问题所在&#xff1a; 从开发服务器日志可知&#xff1a…

单片机c语言模块化实例程序设计,单片机C语言模块化设计

原标题&#xff1a;单片机C语言模块化设计keil中实现 模块化编程.doc在使用 KEIL 的时候,我们习惯上在一个.c 的文件中把自己要写的东西按照自己思路的顺序进行顺序书写。这样是很普遍的写法,当程序比较短的时候比如几十行或者一百多行,是没有什么问题的。但是当程序很长的时候…

python中提取pdf文件某些页_人工智能|Python提取PDF中的文本并朗读

题前的话之前有老师在群里推荐这个&#xff0c;我看了一眼觉得还是蛮有趣的&#xff0c;然后就忘了……昨天又看到这个《宅男福利&#xff01;我50行Python代码让小姐姐给你读Pdf》&#xff0c;今天于是开始自己尝试&#xff0c;谁知道pdfplumber库怎么也安装不了&#xff0c;最…

基于RAF的一个小动画框

RAF也即是requestAnimationFrame&#xff0c;之前的动画都是基于setTimeout写的&#xff0c;所以为了性能方面的考虑&#xff0c;开始使用requestAnimationFrame写动画。 function animation(obj, data) {if (obj.timer) {window.cancelAnimationFrame(obj.timer)}obj.timer w…

c语言定义一个字母的范围,C语言学习知识程序设计试卷及其规范标准答案

C 语言程序设计 笔试试题题号 一 二 三 四 五 六 笔试(70%)综合 (30%)总分分数试卷说明&#xff1a;1. 笔试卷面总分100分&#xff0c;取卷面成绩的70%计入总分&#xff1b;2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和&#xff0c;占总分的30%&#xff1b;3. 答题时禁止拆开…

python执行时间长被kill_用python记录运行pid,并在需要时kill掉它们的实例

我在跑爬虫程序的时候&#xff0c;由于爬虫程序的等待目标服务器返回数据的时间很长&#xff0c;而cpu占用很低&#xff0c;所以经常挂着代理一跑就跑好几百个。但是爬虫程序通常是写了死循环&#xff0c;或直到分配给该进程的任务都跑完才退出的。如果我们想中途结束掉这些任务…

[UVA315]Network(tarjan, 求割点)

题目链接&#xff1a;https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem251 求割点&#xff0c;除了输入用strtok和sscanf处理输入以外&#xff0c;对于求割点的tarjan算法有了进一步理解。 特别注意88行&#xff0…

pmw调光c语言程序,51单片机led灯渐变PWM调光(渐亮渐灭)C语言和汇编源程序

; PWM 控制 LED 灯渐亮渐灭程序; 适用 ME500 开发系统; 晶振为11.0592M; 利用定时器控制产生占空比可变的 PWM 波; 按K1&#xff0c;PWM值增加&#xff0c;则占空比减小,LED 灯渐暗。; 按K2&#xff0c;PWM值减小&#xff0c;则占空比增加,LED 灯渐亮。; 当PWM值增加到最大值或…

imgaug批量椒盐噪声 python_python手写给图像加椒盐噪声和高斯噪声

此文记录自己在做图像数据增强给图像加噪时遇到的一些情况。椒盐噪音&#xff1a;简单点说就是在图像中随机加一些白点或者黑点。from skimage import ioimport randomimport numpy as npdef salt_and_pepper_noise(img, proportion0.05):noise_img imgheight,width noise_img.…

万年历c语言设计报告,C语言实训题目设计报告 万年历

for(i1;i<startday;i){printf("\t");//把每月1日之前的空格打出来}for(i1;i<monthdays;i){printf("%d\t",i);if(i7*k-startday){printf("\n");k;}}}printf("\n\n");}void nianli(){int i,j,k,startday,monthdays,month,year;sys…