您的位置:首页 > 理论基础 > 计算机网络

网络编程(4)B/S

2016-08-14 21:01 99 查看
C/S
与 B/S
☆ C/S ( Client/Server )
客户端和服务端的特点

1、客户端和服务端的软件都需要程序员进行编写。

2、客户端维护起来较为麻烦。

3、客户端的存在可以将一部分运算分离到客户端来运行,减轻了服务器端的压力。

☆ B/S ( Browse/Server )
浏览器和服务端的特点

1、客户端不用程序员编写,直接使用系统中具备的浏览器软件作为客户端即可。程序员只需要编写服务器端就OK了。

2、维护起来也很容易,因为只要维护服务器即可。

3、所有的运算都在服务器端,相对压力较大。



编程练习

(了解B/S模式的底层socket通讯原理)

1、自定义一个服务器,接收浏览器发来的信息。显示浏览器发送了什么信息,并向浏览器发送简单的网页信息。

Myserver类

<span style="font-family:Times New Roman;font-size:14px;">package cn.huncu.net.bs;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(80);
while (true) {
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+"已连接........");
new Thread(new ThreadDemo(s)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ThreadDemo implements Runnable{
private Socket s=null;
public ThreadDemo(Socket s) {
this.s=s;
}

@Override
public void run() {
try {
InputStream in = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
in, "gbk"));
//			String str = null;
//			while ((str = br.readLine()) != null) {
//				System.out.println(str);
//			}
char cbuf[]=new char[1024];
int len=br.read(cbuf);
System.out.println(new String(cbuf, 0, len));
OutputStream out = s.getOutputStream();
PrintStream ps = new PrintStream(out, true);

ps.println("<html><body>");
ps.println("欢迎光临....<br/>");
ps.println("<font size=10 color=green>这是我用Java程序给你发的网页,比较简单,请多包涵...</font>");
ps.println("<table border=1 bordercolor='red' >");
ps.println("<tr> <td>Jack</td> <td>25</td> </tr>");
ps.println("<tr> <td>Tom</td> <td>24</td> </tr>");
ps.println("</table>");
ps.println("</body></html>");

s.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}
</span>


 

2、模拟一个浏览器客户端向服务器发请求,接收并显示响应消息。

MyBrowse类

<span style="font-family:Times New Roman;font-size:14px;">package cn.hncu.net.bs;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class MyBrowse {

public static void main(String[] args) throws IOException {
Socket s = new Socket("www.hncu.net", 80);
PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream(), "gbk"),true);

//模拟浏览器向服务器发送请求
//要按http协议的格式向服务器发消息,否则网站服务器不会应答
out.println("GET / HTTP/1.1");//请求头
out.println("Accept: text/html,application/xhtml,*/*");
out.println("Host: www.hncu.net");
out.println("Connection: keep-alive");
out.println();

//接收服务器的应答消息
InputStream in = s.getInputStream();
byte buf[] = new byte[1024];
int len=0;
while( (len=in.read(buf))!=-1){
String str = new String(buf,0,len);
System.out.println(str);
}

}

}
</span>


 

3、网络蜘蛛,收集网页中的邮箱地址信息。

SpiderDemo类:

<span style="font-family:Times New Roman;font-size:14px;">package cn.hncu.net.bs;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Test;

public class SpiderDemo {

@Test//本地爬
public void getMailsLoc() throws IOException{
String mailReg="\\w+@\\w+(\\.\\w+)+";//@163.com   asw@zjut.edu.cn
Pattern p = Pattern.compile(mailReg);//正则表达式对象(正则工具)

BufferedReader br = new BufferedReader( new FileReader(".\\bin\\cn\\hncu\\net\\bs\\mails.html"));
String line = null;
while( (line=br.readLine())!=null){
Matcher m = p.matcher(line);
while(m.find()){
System.out.println(m.group());//group方法返回:符合正则规则的那段字符串
}
}
}

@Test//上网爬---相比上一版本,只要更改IO中的源就行了
public void getMailsNet() throws IOException{
String mailReg="\\w+@\\w+(\\.\\w+)+";//@163.com   asw@zjut.edu.cn
Pattern p = Pattern.compile(mailReg);//正则表达式对象(正则工具)

URL url = new URL("http://www.sina.com");
BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream()) );

String line = null;
while( (line=br.readLine())!=null){
Matcher m = p.matcher(line);
while(m.find()){
System.out.println(m.group());//group方法返回:符合正则规则的那段字符串
}
}
}

}
</span>


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息