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. python迭代器以及生成器

    迭代器iter():节省内存 Iter()迭代器 每一次输出下一个值 >>> a=iter(range(10)) >>> a.next() 0 >>&g ...

  2. 使用commons-compress解压GBK格式winzip文件到UTF8,以及错误使用ZipArchiveInputStream读出来数据全是空的解决办法

    先上正确方法: 正确方式应该为,先创建一个ZipFile,然后对其entries做遍历,每一个entry其实就是一个文件或者文件夹,检测到文件夹的时候创建文件夹,其他情况创建文件,其中使用zipFil ...

  3. Linux基础命令---验证组文件grpck

    grpck grpck指令可以验证组文件“/etc/group”和“/etc/gshadow”的完整性.检查的内容包括:正确的字段数.唯一有效的组名称.有效的组标识符.成员和管理员的有效列表.“/et ...

  4. bzoj3196 二逼平衡树

    题目链接 平衡树系列最后一题 坑啊 10s时间限制跑了9764ms...还是要学一学bit套主席树啦... 经典的线段树套treap...至于第一发为什么要TLE(我不会告诉你treap插入的时候忘了 ...

  5. MaxiSYS Elite

    The Maxisys Elite is Autel UK’s top of the range diagnostic and analysis scanner with advanced J2534 ...

  6. Django框架----ORM数据库操作注意事项

    1.多对多的正向查询 class Class(models.Model): name = models.CharField(max_length=32,verbose_name="班级名&q ...

  7. C++11 正则表达式简单运用

    正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex.regexp.RE.regexps.regexes.regexen. 正则表达式是一种 ...

  8. Java 多线程并发编程面试笔录一览

    知识体系图: 1.线程是什么? 线程是进程中独立运行的子任务. 2.创建线程的方式 方式一:将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法 方式二:声明实现 Runn ...

  9. 合并两个JsonArray

    //合并两个JSONArray public static String joinJSONArray(JSONArray mData, JSONArray array) { StringBuffer ...

  10. Quick Find (QF)

    Quick Find 顾名思义就是快速查找,构建一个数组,通过下标即可迅速查找其id Union and Find:构建一个数组,下标为索引,数组元素的值为其id,初始id和索引相同 Union(p, ...