java网络web入门级Word文档下载推荐.docx
- 文档编号:4518769
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:21
- 大小:1.13MB
java网络web入门级Word文档下载推荐.docx
《java网络web入门级Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java网络web入门级Word文档下载推荐.docx(21页珍藏版)》请在冰点文库上搜索。
publicvoidrun(){
StringfileName=parse(input);
readFile(fileName);
/**
*解析客户机发过的所有HTTP请求,如果是符合HTTP协议内容的,就分析出客户机所要访问文件的名字,并且返回文件名。
publicStringparse(InputStreaminput)throwsIOException{
BufferedReaderin=newBufferedReader(newInputStreamReader(input));
StringinputContent=in.readLine();
if(inputContent==null||inputContent.length()==0){
sendError(400,"
Clientinvokeerror"
);
returnnull;
//分析客户请求的HTTP信息,分析出到底想访问哪个文件,
//发过来的HTTP请求应该是三部分。
Stringrequest[]=inputContent.split("
"
if(request.length!
=3){
//第一部分是请求的方法
Stringmethod=request[0];
//第二部分是请求的文件名
StringfileName=request[1];
//第三部分是HTTP版本号
StringhttpVersion=request[2];
System.out.println("
Method:
+method+"
filename:
+fileName+"
HTTPversion:
+httpVersion);
returnfileName;
*处理调用一个文件的请求
publicvoidreadFile(StringfileName)throwsIOException{
Filefile=newFile(Processor.WEB_ROOT+fileName);
if(!
file.exists()){
sendError(404,"
FileNotFound"
return;
//把文件的内容读取到in对象中。
InputStreamin=newFileInputStream(file);
bytecontent[]=newbyte[(int)file.length()];
in.read(content);
out.println("
HTTP/1.0200sendFile"
Content-length:
+content.length);
out.println();
out.write(content);
out.flush();
out.close();
in.close();
*发送错误的信息
publicvoidsendError(interrNum,StringerrMsg){
HTTP/1.0"
+errNum+"
+errMsg);
Content-type:
text/html"
<
html>
"
head>
title>
Error"
--"
+errMsg+"
/title>
/head>
h1>
/h1>
/html>
}
importjava.io.IOException;
import.ServerSocket;
publicclassWebServer{
/**默认使用的服务器Socket端口号*/
publicstaticfinalintHTTP_PORT=8080;
privateServerSocketserverSocket;
publicvoidstartServer(intport){
serverSocket=newServerSocket(port);
System.out.println("
WebServerstartupon"
+port);
while(true){
Socketsocket=serverSocket.accept();
//通过线程的方式来处理客户的请求
newProcessor(socket).start();
}
*WebServer类的启动方法,可以通过命令行参数指定当前Web服务器所使用的端口号。
publicstaticvoidmain(String[]argv)throwsException{
WebServerserver=newWebServer();
if(argv.length==1){
server.startServer(Integer.parseInt(argv[0]));
}else{
server.startServer(WebServer.HTTP_PORT);
import.*;
publicclassTCPClient
{
publicstaticvoidmain(String[]args)throwsException
{
Sockets=newSocket("
127.0.0.1"
6666);
//8行
//第一个参数是要连接到的主机IP,即表示要连接到那台机器上,127.0.0.1表示链接到本机,第二个参数表示要连接到哪个网络程序上
//newSocket("
6666)一旦构造对象成功,就意味着这时已经产生了一个试图和IP为"
端口为6666的网络程序进行连接的请求
//如果这时IP为"
的机器上正好有一个网络程序在监听6666端口,这时连接就会建立成功
//所谓连接成功是指这两个网络程序建立了一个通信管道,双方都可以通过这个管道写数据和读数据,并且一方写入的数据实际就是另一方要读取的数据,一方要读取的数据实际就是另一放要写入的数据,即这个管道实际是双向的,任何一方都可以通过getInputStream()和getOutputStream()获取输入流和输出流两个流,并且一方的输入流实际就是另一方的输出流,这是同一个流,一方的输出流实际就是另一方的输入流,这也是同一个流即一个通信管道两个流,双方各自都可以得到两个流,这两个流分别是输入流和输出流
//记住:
一旦new出了Socket对象,该对象就会自动向服务器端发送连接请求,如果连接不成功则程序立即终止
//因此我们在TCP编程的客户端是找不到请求连接的代码,但是在服务器端却存在监听客户端连接请求的代码,代码类似于:
ss.accept()
OutputStreamos=s.getOutputStream();
//16行一旦连接成功,相当于建立了一根管道,这根管道在客户端相当于输出流管道,在服务器端相当于输入流管道!
//程序如果能执行到16行说明已经连接成功,因为8行执行完后就会自动立即发送一个连接请求,如果服务器端没有打开,或者服务器端虽然已经打开但是却没有监听客户端的连接请求,则程序会立即终止,是不会执行到16行的,如果执行到了16行那说明连接成功了
DataOutputStreamdos=newDataOutputStream(os);
dos.writeUTF("
同志们好"
dos.flush();
dos.close();
s.close();
publicclassTCPServer
ServerSocketss=newServerSocket(6666);
//8行6666是端口号,表示该服务器程序在监听6666端口是否有客户端程序的连接
//new出的ServerSocket对象ss并不会自动监听客户端有没有向6666端口发送请求,要想监听6666端口是否有客户端的请求,则必须的调用ss对象的accept方法
//如果本程序只有8行这一行的代码的话,本程序运行时将无任何输出结果并会立即终止
while(true)
{
Sockets=ss.accept();
//accept()功能:
等待客户端的连接,没有连接,则继续监听,程序停滞不前,如果接收到客户端的一个连接,则自动将该连接封装为一个Socket对象,程序将不再阻塞,而是继续放下执行
//这里的s实际是链接到客户端的s,服务器端的s.getInputStream()和客户端的s.getOutputStream()实际是同一根管道
//accept()是阻塞式方法,如果接收不到客户端的连接,则程序将停止不前
一个连接已经建立!
!
DataInputStreamdis=newDataInputStream(s.getInputStream());
//通过Socket对象可以获得InputStream和OutputStream两个管道
System.out.println(dis.readUTF());
//readUTF()方法也是阻塞式方法,如果接收不到客户端数据,则程序将停止不前
dis.close();
//DataInputStream和InputStream流中都没有flush方法DataOutputStream和OutputStream流中都有flush方法
s.close();
}
publicclassTestUDPClient
publicstaticvoidmain(Stringargs[])throwsException
//定义码头ds
DatagramSocketds=newDatagramSocket();
//13行到23行完成的功能是:
定义可以发送数据的集装箱dp,dp中保存着n的二进制代码
longn=10000L;
//13行
ByteArrayOutputStreambaos=newByteArrayOutputStream();
//注意ByteArrayOutputStream的所有构造函数都没有byte[]buf这样的形参,即定义ByteArrayOutputStream流对象时是不能指定byte数组的,因为这个连接到的byte数组是由ByteArrayOutputStream自动生成的9行API:
publicByteArrayOutputStream():
创建一个新的byte数组输出流。
缓冲区的容量最初是32字节,如有必要可增加其大小。
//9行代码一旦执行完毕,意味着两点:
1、在内存中生成了一个大小为32个字节的byte数组2、有一根叫做baos的管道已链接到了该byte数组中,并且可以通过这个管道向该数组中写入数据
//虽然此时可以通过baos向baos所连接到的在内存中分配好的byte数组中写入数据,但是ByteArrayOutputStream流并没有提供可以直接把long类型数据直接写入ByteArrayOutputStream流所连接到的byte数组中的方法,简单说我们没法通过baos向baos所连接到的byte数组中写入long类型的数据,查API文档可以发现:
ByteArrayOutputStream流中并没有类似writeLong()这样的方法,但是DataOutputStream流中却有writeLong()writeFloat()等方法
DataOutputStreamdos=newDataOutputStream(baos);
dos.writeLong(n);
//把n变量所代表的10000L写入dos所依附的baos管道所连接到的内存中的大小为32字节的byte数组中
byte[]buf=baos.toByteArray();
//DataOutputStream流中并没有toByteArray()方法,但是ByteArrayOutputStream流中却有toByteArray()方法,所以不可以把baos改为dos,否则编译时会出错!
ByteArrayOutputStream流中toByteArray()方法的含义,摘自API“创建一个新分配的byte数组。
其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中”
DatagramPacketdp=newDatagramPacket(buf,buf.length,
newInetSocketAddress("
5678)
);
//23行
//在码头上把集装箱中的数据发送给对方
ds.send(dp);
//关闭码头
ds.close();
publicclassTestUDPServer
//定义码头
DatagramSocketds=newDatagramSocket(5678);
//5678表示该码头占用的是5678这个编号,因为一台计算机可以有多个码头接收多个数据,这些码头用不同的编号来表示,这些编号的专业术语就是端口号
//定义可以用来接受数据的集装箱
bytebuf[]=newbyte[1024];
DatagramPacketdp=newDatagramPacket(buf,buf.length);
try
while(true)
{
//在码头上用集装箱接受对方发送过来的数据
ds.receive(dp);
//注意:
本语句执行完毕就意味着,dp数据包中就已经含有了从客户端接收过来的数据
//从集装箱中取出对方发送过来的数据
ByteArrayInputStreambais=newByteArrayInputStream(dp.getData());
//1、ByteArrayInputStream的内核必须是个字节数组,并且是从该字节数组中读取数据2、dp.getData()表示把dp集装箱中的数据转化为一个字节数组并返回该字节数组
DataInputStreamdis=newDataInputStream(bais);
System.out.println(dis.readLong());
catch(Exceptione)
ds.close();
//关闭码头
/*
在JDK1.6中的运行结果是:
----------------------------------
10000
数据源自:
127.0.0.1:
1464
1471
1474
*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 网络 web 入门