?? webserver.java
字號:
package com.liuxin;
//WebServer.java 用JAVA編寫Web服務器
import java.io.*;
import java.net.*;
public class WebServer {
public static void main(String args[]) {
int i = 1, PORT = 8080;
ServerSocket server = null;
Socket client = null;
try {
server = new ServerSocket(PORT);
System.out.println("Web Server is listening on port "
+ server.getLocalPort());
for (;;) { //相當于while(true)循環;
client = server.accept(); // 接受客戶機的連接請求
new ConnectionThread(client, i).start();
i++;
}
} catch (Exception e) {
System.out.println(e);
}
}
}
/* ConnnectionThread類完成與一個Web瀏覽器的通信 */
class ConnectionThread extends Thread {
Socket client; // 連接Web瀏覽器的socket字
int counter; // 計數器
public ConnectionThread(Socket cl, int c) {
client = cl;
counter = c;
}
public void run() // 線程體
{
try {
String destIP = client.getInetAddress().toString(); // 客戶機IP地址
int destport = client.getPort(); // 客戶機端口號
System.out.println("Connection " + counter + ":connected to "
+ destIP + " on port " + destport + ".");
PrintStream outstream = new PrintStream(client.getOutputStream());
DataInputStream instream = new DataInputStream(client
.getInputStream());
String inline = instream.readLine(); // 讀取Web瀏覽器提交的請求信息
System.out.println("Received:" + inline);
if (getrequest(inline)) { // 如果是GET請求
String filename = getfilename(inline);
File file = new File(filename);
if (file.exists()) { // 若文件存在,則將文件送給Web瀏覽器
System.out.println(filename + " requested.");
outstream.println("HTTP/1.0 200 OK");
outstream.println("MIME_version:1.0");
outstream.println("Content_Type:text/html");
int len = (int) file.length();
outstream.println("Content_Length:" + len);
outstream.println("");
sendfile(outstream, file); // 發送文件
outstream.flush();
} else { // 文件不存在時
String notfound = "Error 404-file not found";
outstream.println("HTTP/1.0 404 no found");
outstream.println("Content_Type:text/html");
outstream
.println("Content_Length:" + notfound.length() + 2);
outstream.println("");
outstream.println(notfound);
outstream.flush();
}
}
long m1 = 1;
while (m1 < 11100000) {
m1++;
} // 延時
client.close();
} catch (IOException e) {
System.out.println("Exception:" + e);
}
}
/* 獲取請求類型是否為“GET” */
boolean getrequest(String s) {
if (s.length() > 0)
{
if (s.substring(0, 3).equalsIgnoreCase("GET"))
return true;
}
return false;
}
/* 獲取要訪問的文件名 */
String getfilename(String s) {
String f = s.substring(s.indexOf(' ') + 1);
f = f.substring(0, f.indexOf(' '));
try {
if (f.charAt(0) == '/')
f = f.substring(1);
} catch (StringIndexOutOfBoundsException e) {
System.out.println("Exception:" + e);
}
if (f.equals(""))
f = "index.html";
return f;
}
/* 把指定文件發送給Web瀏覽器 */
void sendfile(PrintStream outs, File file) {
try {
DataInputStream in = new DataInputStream(new FileInputStream(file));
int len = (int) file.length();
byte buf[] = new byte[len];
in.readFully(buf);
outs.write(buf, 0, len);
outs.flush();
in.close();
} catch (Exception e) {
System.out.println("Error retrieving file.");
System.exit(1);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -