JAVA面向网络编程
通过本文将学习到
- 什么是网络编程
- URL类获取网络信息
- Socket的解释
- 通过Socket实现底层网络通信
- 一个简单的服务器和客户端的通信
2、网络编程
什么是网络编程?我对网络编程的理解就是程序能够再网上相互交流数据信息,同时处理一些事情。再返回!就是能通过网络进行交互的一种模式。附上百度百科解释。
网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计这5部分你都要接触。
3、URL类
JAVA中一般通过java.net包的类进行编程。URL类便是JAVA对网络资源地址的表示。
URL:Uniform Resouce Location(即是同一资源地址),其基本格式是
协议名:主机名/目录及文件名 例子:
如何通过URL获取网上的文件内容了?
- 创建一个URL类 URL url = new URL(“https://www.baidu.com");
- 利用URL类的openStream()方法获取对应的输入流 InputStream in = url.openStream();
- 通过InputStreae读取类容.
下面是实例代码。
package chapter10;
import java.applet.*;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
/**
*
* <p>Title: URLGetFile</p>
* <p>Description:this method is used to test URL doload File . first step ,create a project of URL object .seconde step
* get outputstream from URL object .Then read it.
* 使用url对象来读取网络上的文件 。
* </p>
* @author HAND_WEILI
* @date 2018年7月18日
*/
public class URLGetFile extends Applet {
public URL url;
TextArea showarea = new TextArea("展示对应的文件数据");
public void init() {
try {
url = new URL("https://www.baidu.com"); //创建对应的url对象 URL的格式是 协议名:主机名/文件及项目名 https://www.baidu.com/
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
add(showarea);
}
public void start() {
InputStream in = null; //定义输入流
BufferedReader reader = null; //定义缓冲流
String line;
try {
in = url.openStream(); //将url得到的数据转为输入流
reader = new BufferedReader(new InputStreamReader(in)); //将数据处理
while((line = reader.readLine())!=null) { //直接将东西写进去了 。平时要在外面定义变量然后再不停往下读 。
showarea.append(line+"\n");//将类容加入are
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//====================测试
public static void main(String[] args) {
Frame f = new Frame("url test");
Applet ap = new URLGetFile(); //将applet放入这个frame种
ap.init(); //启动一下
f.add(ap); //将applet加入jfame
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){System.exit(0);}
}); //提供关闭事件
f.setSize(400, 300);
f.setLocationRelativeTo(null);
f.setVisible(true);
ap.start();
}
}
4、Socket实现底层网络通信
socket是套接字的意思,是一种网络通信协议。属于TCP/IP协议的编程接口,通信双方通过Socket进行交互。
一般来说会建立一个对应的服务端ServerSocket,来不停的listen()网络中的请求。说到请求交互,不得不了一下IP、协议和端口了 。我们都知道没一台连接到因特网的机器都是有一个独立的IP地址。这是用来定位唯一一台机器。而没一个机器都有很多端口,这些端口就是用来进行网络通讯的一个入口。每一个端口对应一个服务不能够抢占,因此通过IP地址和端口号就能够唯一的确定是那一台电脑上哪一个服务再请求信息。因此,在做服务器的Socket的时候需要监听请求。可以通过一个多线程,或者一个死循环不停的在网络中监控。知道接受到请求,ServerSocket通过accept()方法接受到请求,当接受到对应的请求后创建一个新的Socket来接收。然后通过流来进行读取,或者写入。通过一张图来解释!
5、一个简单的服务器和客户端DEMO
实现整个的过程,首先是创建一个服务端
package chapter10;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* <p>Title: TestServer</p>
* <p>Description:In this type you will leanrling about how to compile Servers
* 这是一个介绍怎么写简单的服务器的JAVA程序</p>
* @author HAND_WEILI
* @date 2018年7月18日
*/
public class TestServer {
public static void main(String[] args) {
//1.创建服务端socket
ServerSocket s = null;
try {
//2、设置端口号
s = new ServerSocket(8888);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//3、循环等待客户端的请求
while(true) {
try {
//4、创建soket接受得到的请求,这个方法一直阻塞知道成功获得了一个socket请求
System.out.println("正再被阻塞,等待客户端");
Socket s1 = s.accept();
//5、输出流.
OutputStream os = s1.getOutputStream();
//6、修改成处理流
DataOutputStream dos= new DataOutputStream(os);
dos.writeUTF("hello client i'm server");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("已经传输");
}
}
}
2、接下来是客户端
package chapter10;
import java.io.*;
import java.io.InputStream;
import java.net.Socket;
/**
*
* <p>Title: TsetClient</p>
* <p>Description:this type is used to test easy client 用来测试简单的客户端</p>
* @author HAND_WEILI
* @date 2018年7月18日
*/
public class TsetClient {
public static void main(String[] args) {
//1、创建一个socket来发请求
try {
Socket s = new Socket("127.0.0.1",8888);
//2、将读到的数据写出读数据
InputStream is = s.getInputStream();
//2、1将流进行处理
DataInputStream dis = new DataInputStream(is);
//3、ok
System.out.println(dis.readUTF());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
6、总结
今天学习了网络编程,怎么说了对其有基础理解但是!像多线程这一块的使用却感觉不太理解。需要在写一个例子多加深印象。其次使用网络+io+界面+多线程+正则实现网络爬虫可以研究一下 。然后接下来一个月的目标是将,淘淘商城完成,然后开始设计自己的个人网站!