Java笔记--网络编程
1、IP地址:InetAddress类
--唯一的标识Internet上的计算机
--本地回环地址(hostAddress)127.0.0.1 主机名(hostName):localhost
//根据域名获取IP地址信息
InetAddress inet = InetAddress.getByName("localhost");
System.out.println(inet.getHostName());
System.out.println(inet.getHostAddress()); //获取本机IP地址
inet = InetAddress.getLocalHost();
System.out.println(inet);
2、端口号:标识正在计算机上运行的进程。
3、网络通信协议:计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准;
--传输层中的两个重要协议:1、传输控制协议TCP(Transmission Control Protocol); 2、用户数据报协议UDP(User DatagramProtocol)。4、网络套接字Socket:端口号与IP地址的组合。
--网络通信就是Socket间的通信,Socket允许程序把网络程序当成一个流,数据在两个Socket间通过IO传输。
--主动发起通信的应用程序成为客户端,等待通信请求的成为服务端。
4、Socket编程例子(TCP):
--Client:
public void client() {
Socket s = null;
OutputStream os = null;
InputStream is = null;
try{
//1.创建一个Socket对象,通过构造器指明服务端的IP地址和接收程序的端口号
s = new Socket("127.0.0.1", 9090);
//2.getOutputStream获得OutputStream对象后发送数据
os = s.getOutputStream();
os.write("This is Client".getBytes());
//3.发送完毕之后关闭发送
s.shutdownOutput();
//4.getInoutStream获得InoutStream对象,接收服务器返回的数据
is = s.getInputStream();
byte[] b = new byte[20];
int len = 0;
while((len = is.read(b)) != -1){
System.out.println(new String(b, 0, len));
}
}catch(IOException e){
e.printStackTrace();
}finally{
//5.关闭相应的资源
if(is != null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(os != null){
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(s != null){
try {
s. close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
--Server:
public void Server() {
ServerSocket ss = null;
Socket s = null;
InputStream is = null;
OutputStream os = null;
try{
ss = new ServerSocket(9090);
s = ss.accept();
is = s.getInputStream();
byte[] b = new byte[20];
int len = 0;
while((len = is.read(b)) != -1){
System.out.println(new String(b, 0, len));
}
os = s.getOutputStream();
os.write("Accepted".getBytes());
}catch(IOException e){
e.printStackTrace();
}finally{
if(os != null){
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(is != null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(s != null){
try {
s. close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ss != null){
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
5、类DatagramSocket和DataPacket实现了基于UDP协议的网络程序:
--UDP数据包通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送达目的地,也不确定什么时候可以到达;
--DatagramPacket类封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号;
--UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送放与接收方的连接。
6、DatagramSocket编程(UDP):
--Client:
public void client() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
byte[] b = "This is Client".getBytes();
DatagramPacket dp = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 8787);
ds.send(dp);
}catch (IOException e) {
e.printStackTrace();
}finally{
ds.close();
}
}
--Server:
public void server(String[] args) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(8787);
byte[] b = new byte[1024];
DatagramPacket dp = new DatagramPacket(b, 0, b.length);
ds.receive(dp);
System.out.println(new String(b, 0, dp.getLength()));
}catch (IOException e) {
e.printStackTrace();
}finally{
ds.close();
}
}
7、URL编程(Uniform Resource Locator:统一资源定位符)
--构成:<传输协议>://<主机名>:端口号/<文件名>;
--URL类:一个URL对象对应着网络上的一个资源;
--URL类常用方法:1)public String getProtocol();//获取该URL的协议
2)public String getHost();//获取该URL的主机名
3)public String getPort();//获取该URL的端口号
4)public String getPath();//获取该URL的文件路径
5)public String getFile();//获取文件名
6)public String getRef();//获取文件的相对位置
7)public String getQuery();//获取该URL的查询名
--URL的openStream()方法能够从网络上读取数据。
8、URLConnection:表示URL所引用的远程对象的连接:
--UrlConnection urlConnection = url.openConnection();
--InputStream is = urlConnection.getInputStream();//输入流
--OutputStream os = urlConnection.getOutputStream();//输出流
Java笔记--网络编程的更多相关文章
- Netty | 第1章 Java NIO 网络编程《Netty In Action》
目录 前言 1. Java 网络编程 1.1 Javs NIO 基本介绍 1.2 缓冲区 Buffer 1.2 通道 Channel 1.3 选择器 Selector 1.4 NIO 非阻塞网络编程原 ...
- 二十三、Java基础--------网络编程
Java中另一个重要技术就是网络编程了,为了更好的学习web方向的知识,有必要对java之网络编程好好学习,本文将围绕网络编程技术进行分析. 常见的网络协议:UDP.TCP UDP 1. 将数据源和目 ...
- JAVA的网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- Java Socket 网络编程心跳设计概念
Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...
- 20145325张梓靖 实验五 "JAVA的网络编程"
20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...
- 【转】JAVA之网络编程
转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...
- JAVA的网络编程【转】
JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...
- Java面向对象 网络编程 下
Java面向对象 网络编程 下 知识概要: (1)Tcp 练习 (2)客户端向服务端上传一个图片. (3) 请求登陆 (4)url 需求:上传图片. 客户端: ...
- Java面向对象 网络编程 上
Java面向对象 网络编程 上 知识概要: (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...
随机推荐
- Flask - flask-mail
flasky中git reset --hard 8e 问题 使用flask-mail通过163邮箱的smtp服务发送token认证邮件,要关闭TLS才能发送 原理 还在研究中 结果
- mysql事务隔离分析
首先说明下,这里主要内容为整理总结网络搜索的零散信息. 写在最前面,mysql事务是在Innodb引擎中得以实现的,如果这点不了解的话,请自行了解. 事务直接数据的可见性通过MVCC(多版本并发控制) ...
- Practical aspects of deep learning
If your Neural Network model seems to have high variance, what of the following would be promising t ...
- oracle的concat、convert、listagg函数(字符串拼接和类型转换)
ORACLE几种常用的方法(2) 1.concat常见的用法 : 格式:concat(String1,String2) 说明:concat函数用于将两个字符串连接起来,形成一个单一的字符串 实例: s ...
- nginx 加工上游服务器返回的内容,并返回给客户端
禁用上游响应头部功能 Syntax: proxy_ignore_headers field ...; Default: — Context: http, server, location 功能介绍:某 ...
- 夯实Java基础(二十)——JAVA正则表达式
1.为什么要用正则表达式 首先我们先来做一道题目:判断一个字符串是否由数字组成.代码示例如下: public class Test { public static void main(String[] ...
- [原]JointJS流程图
最近项目上需要用流程图来做问题定界分析,之前有同事用jsPlumb做过,但是阅读代码后觉得比较麻烦,所以自己又找了一圈,找到一个叫Dagre-D3的开源类库,画出来的效果如下图,Dagre-D3最大的 ...
- 设计模式课程 设计模式精讲 2-2 UML类图讲解
1 类图讲解 1 类图讲解 + 公共方法 - private权限 # protected权限 包内和包外继承的子类都能引用 ~ default权限(包权限)只有包内能引用 下划线 静态 Stati ...
- 获取美拍视频的链接--JS分析
美拍链接:https://www.meipai.com/ 找到视频链接的标签,源代码中没有这个div 通过Fiddler抓包,找到class="mp-h5-player-layer-vide ...
- python如何在文件每一行前面加字符串?
对于python中原来的文件,需要在每一行前面添加一个特舒符号,比如逗号或者“--”,需要先把原来的文件内容记录下之后,进行清空,再进行写入,另外需要注意的是r+和a+都是可写可读,不过a+是从文件末 ...