网络编程:
网络编程的2种形式:
- C/S结构(客户服务器结构):此类程序要分别写客户端和服务器的代码;开发比较麻烦,要维护两套程序的使用,但是它的安全性比较高,使用自己的协议和接口;
- B/S结构(浏览器服务器结构):不再单独开发客户端代码,只开发一套服务器端程序,客户端使用浏览器进行访问;只需要维护一套程序,但是它的安全性不高,因为使用的是公共的HTTP协议和公共的80端口;
主要学习C/S结构(即要开发2套程序)也可以称之为Socket程序,对于C/S程序分为两类:
- TCP程序:采用可靠的连接方法进行传输;
- UDP程序:采用不可靠的连接方法进行传输;属于数据报程序;
基本实现:
进行网络程序开发最核心的两个类:
- 服务器类:ServerSocket;主要工作在服务器端,用于接收用户的请求;
- 客户端:Socket;每一个连接到服务器端的用户,都使用Socket表示;
定义服务器端——主要使用ServerSocket:
- 构造方法:public ServerSocket(int port) throws IOException;设置监听接口;
- 接收客户端连接:public Socket accept() throws IOException;
- 取得客户端输出的功能:public OutputStream getOutputStream() throws IOException;
public class HelloServer {
public static void main(String args[]) throws Exception {
// 所有服务器必须有端口
ServerSocket server = new ServerSocket(999);
System.out.println("等待客户端连接...");
// 等待客户端连接
Socket client = server.accept();
// OutputStream并不方便内容的输出、所以要利用打印流完成输出;
PrintStream out = new PrintStream(client.getOutputStream());
out.print("Hello world!");
out.close();
client.close();
server.close();
}
}
定义客户端——Socket:
- 构造方法:public Socket(String host,int port) throws IOException;
host:表示主机的IP地址,如果使用本机进行访问,那么使用localhost(127.0.0.1)代替IP;
- 得到输入数据:public InputStream getInputStream() throws IOException;
public class HelloClient {
public static void main(String[] args) throws IOException {
// 连接服务器端
Socket client = new Socket("localhost", 999);
// 取得客户端输入数据流对象,表示接收服务器端输出的信息
Scanner scan = new Scanner(client.getInputStream());
scan.useDelimiter("\n");
if (scan.hasNext()) {
System.out.println("[回应数据]" + scan.next());
}
scan.close();
client.close();
}
}
客户端现在也只是连接一次服务器,并且接收输入数据输出后结束操作;
Echo模型:
本程序的意义:客户端发送数据给服务器端;服务器端接收后前面加一个“ECHO:”标记返回;
本程序的设计如下:
- 由于需要采用多次输入形式,所以不能在每次连接之后就立刻关闭服务器端;
- 可以设置一个字符串,如果设置输入了"byebye",那么才表示结束本次的Echo操作;