URL的应用:

获得网页源代码可以用字节流、字符流,流的获取可以用url.openStream(),也可以用con.getInputStream():

字节流:

URL url = new URL("https://www.baidu.com/");
InputStream urlStream = url.openStream();
byte[] b = new byte[1024];
int size = urlStream.read(b, 0, b.length); FileOutputStream fileStream = new FileOutputStream("F:/shutao.html");
while(size > 0)
{
fileStream.write(b, 0, size);
size = urlStream.read(b, 0, b.length);
} fileStream.close();
urlStream.close();

用URLConnection对象来获得流:

URL url = new URL("https://www.baidu.com/");
URLConnection con = url.openConnection();
InputStream conStream = con.getInputStream();

Socket应用:

Socket是使用TCP连接,所以一定要建立与服务器的连接之后,才可以进行读写操作等通信行为。

举例——在Server线程中写,Client线程中读(先从服务器获得Socket,然后就可以在另一端创建对应的Socket建立与服务器的连接;如果双方只是各自创建Socket,就不能形成正确的连接,直接抛出异常):

public class Server extends Thread {

    @Override
public void run() {
try {
ServerSocket server = new ServerSocket(, );
//通过Socket来获得InputStream、OutputStream
Socket connection = server.accept();
ObjectOutputStream output = new ObjectOutputStream(connection.getOutputStream());
output.write();
output.close();
connection.close();
server.close();
} catch (Exception e) {
e.printStackTrace();
}
} }
public class Client extends Thread { @Override
public void run() {
try {
Socket client = new Socket("127.0.0.1", );
ObjectInputStream input = new ObjectInputStream(client.getInputStream());
System.out.println(input.read());
input.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
} }

UDP(用户数据报协议)的应用:

//UDP没有服务器和客户端,只有发送者与接收者
public class Server extends Thread { @Override
public void run() {
try {
//整个过程只需要,指明接收和发送两个端口:
       //1、两个端口相同,才能保证正确的通信
       //2、发送者在创建数据包时(packet),指定端口;接收者在建立通讯时(socket),指定端口(不这样,会报错的)
       //————发送无需建立连接,故创建通讯不指明端口;发送只需将端口写入Packet中,协议决定Packet的传输;而接收则在对应位置准备收信并保存,所以Socket指明端口就行了
DatagramSocket client = new DatagramSocket();
byte[] b = "hello".getBytes();
DatagramPacket data = new DatagramPacket(b, b.length, InetAddress.getByName("127.0.01"), 2121); //发送端口
client.send(data);
client.close();
} catch (Exception e) {
e.printStackTrace();
}
} }
public class Client extends Thread { @Override
public void run() {
try {
DatagramSocket client = new DatagramSocket(2121); //接收端口
byte[] b = new byte[1024];
DatagramPacket data = new DatagramPacket(b, b.length);
client.receive(data); //接收方法会阻塞该线程
System.out.println(new String(b));
System.out.println(new String(data.getData()));
client.close();
} catch (Exception e) {
e.printStackTrace();
}
} }

Cookie的使用:

//Server
<body>
<%
Cookie cookie = new Cookie("username", "shutao"); //Cookie名称+值
cookie.setComment("从这个Cookie中,可获得登录信息(用户名)");
//Cookie默认处于会话级,仅存于浏览器内存中,关闭浏览器后,Cookie被删除
//也可以将Cookie存储在本地,需要设置存储时长
cookie.setMaxAge(60 * 60 * 24); //秒级单位——1天
//刚创建的Cookie在服务器,必须用response对象发送到客户端才能起作用
response.addCookie(cookie);
%>
<jsp:forward page="Client.jsp"></jsp:forward>
</body> //Client
<body>
<%
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies)
{
if(cookie.getName().equals("username"))
{
out.println(cookie.getValue());
}
}
%>
</body>

Cookie是保存在客户端的,Session保存在服务器端 ;Cookie最终存放的所有东西都将是String,而Session可以存放Object。

Java解析xml、json数据:

读xml:

public static void main(String[] args) throws Exception
{
Document document = getXmlDocument("test.xml");
Node root = document.getFirstChild();
NodeList nodeList = root.getChildNodes();
for(int i = 0; i < nodeList.getLength(); i++)
{
if(nodeList.item(i) instanceof Element)
{
NodeList list = nodeList.item(i).getChildNodes();
for(int j = 0; j < list.getLength(); j++)
{
Node node = list.item(j);
//这一步是为了:把那个text的什么东西去掉:所以有几次换行缩进,就弄几次NodeList的循环(为了提高效率,应该把所有换行缩进的地方都去掉)
if(node instanceof Element)
System.out.println(node.getTextContent());
}
}
}
} public static Document getXmlDocument(String fileName) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//import org.w3c.dom.*;
Document document = builder.parse(new File(fileName));  //也可以用流builder.parse(new FileInputStream(fileName));
return document;
}

字符编码转换:

//用户输入到tomcat层时,tomcat会将输入进行编码,默认编码配置为iso-8859-1
//对于中文的字符编码,有4种处理:推荐第2种,更推荐第4种
String utf = new String(str.getBytes("iso-8859-1"), "utf-8"); //1、在获得请求之后,对数据转码
request.setCharacterEncoding("UTF-8"); //2、在获得请求之前,先设置所有请求的编码
//3、直接修改tomcat的配置:设置Connector的URIEncoding="UTF-8"
//4、在过滤器中设置

Java—网络编程基础的更多相关文章

  1. Java网络编程基础(Netty预备知识)

    今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...

  2. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

  3. java网络编程基础——网络基础

    java网络编程 网络编程基础 1.常用的网络拓扑结构: 星型网络.总线网络.环线网络.树形网络.星型环线网络 2.通信协议的组成 通信协议通常由3部分组成: 语义部分:用于决定通信双方对话类型 语法 ...

  4. 【Java基础】Java网络编程基础知识

    什么是网络编程 网络编程是通过使用套接字来达到进程间通信目的,那什么是套接字呢?其实套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的 ...

  5. JAVA网络编程基础知识

    网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...

  6. java网络编程基础

    前言 通过网络进行数据传输时,一般使用TCP/UDP进行数据传输.但是两个的区别就是TCP可靠,UDP不可靠.两个的共同之处就是都需要建立socket套接字,将IP地址和端口port进行绑定.但是服务 ...

  7. java网络编程基础——TCP网络编程一

    基于TCP协议的网络编程 TCP/IP协议是一种可靠的网络协议,它的通信的两端各自建立一个Socket,从而在通信的两端之间形成网络虚拟链路. Java使用Socket对象来代表两端的通信端口,并通过 ...

  8. java网络编程基础——基本网络支持

    基本网络支持 java.net包主要为网络编程提供支持. 1.InetAddress InetAddress类代表IP地址,还有两个子类:Inet4Address.Inet6Address. pack ...

  9. java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例

    什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...

  10. java 网络编程基础 1

    关于协议: 应用层网络协议包括:http,ftp,telnet,..... 传送层网络协议:使用socket封装的TCP,或UDP 端口: 用于网络通讯时传输数据时区分当前网络连接是与本机中的哪个应用 ...

随机推荐

  1. RESTful API 设计指南,RESTful API 设计最佳实践

    RESTful API 设计指南,RESTful API 设计最佳实践 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). ...

  2. hashCode 一致性hash 算法

    1 如果两个对象相同,那么它们的hashCode值一定要相同.也告诉我们重写equals方法,一定要重写 hashCode方法,同一个对象那么hashcode就是同一个(同一个对象什么都是相同的).2 ...

  3. inux 驱动程序开发中输入子系统总共能产生哪些事件类型(EV_KEY,EV_ABS,EV_REL)

    inux 驱动程序开发中, 输入子系统总共能产生哪些事件类型?,以及分别是什么意思?详见如下: Linux中输入设备的事件类型有EV_SYN 0x00 同步事件EV_KEY 0x01 按键事件,如KE ...

  4. .NET 常用ORM之Gentle.Net

    .Net常用的就是微软的EF框架和Nhibernate,这两个框架用的都比较多就不做详细介绍了,今天我们来看看Gentle.Net,Gentle.Net是一个开源的优秀O/R Mapping的对象持久 ...

  5. Python+OpenCV图像处理(八)—— 图像直方图

    直方图简介:图像的直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素.还不明白?就是统计一幅图某个亮度像素数量.比如对于灰度值12,一幅图里面有2000 个像 ...

  6. 开启redis-server提示 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方法

    在bin目录中开启Redis服务器,完整提示如下: 3496:C 25 Apr 00:56:48.717 # Warning: no config file specified, using the  ...

  7. python的ws库功能,实时获取服务器ws协议返回的数据

    # -*- coding:utf-8 -*- ''' 模块下载,帮助地址:https://github.com/liris/websocket-client#readme 模块:websocket-c ...

  8. PyCharm 安装及破解方法

    PyCharm 安装及破解方法 一.安装 首先要下载Pycharm这个软件,可以在官网下载进行下载. 下载完软件之后,双击安装文件即可进行安装,双击后出现下图所示的提示,点击Next即可. 然后会出现 ...

  9. NATS—协议详解(nats-protocol)

    NATS的协议是一个简单的.基于文本的发布/订阅风格的协议.客户端连接到 gnatsd(NATS服务器),并与 gnatsd 进行通信,通信基于普通的 TCP/IP 套接字,并定义了很小的操作集,换行 ...

  10. 【题解】Luogu P4450 双亲数

    原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 设F(t)表示满足gcd(x,y)%t=0的数对个数,f(t)表示满足gcd(x,y)=t的数对个数,实际上答案就是f(d) 这就满足莫比乌斯反演 ...