Python判断远端服务器(本机Java服务器程序)端口是否通

首先是java多线程web服务器启动:

java版web服务器代码如下:

package webbook.chapter2;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Webserver {
public static final int HTTP_PORT=8040;
private ServerSocket serverSocket;

public void startServer(int port){
    try{
        serverSocket=new ServerSocket(port);
        System.out.println("Web Server startup on "+port);
        while (true) {
            Socket socket=serverSocket.accept();
            new Processor(socket).start();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

    public static void main(String[] argv) throws Exception {
        Webserver server=new Webserver();
        if (argv.length==1) {
            server.startServer(Integer.parseInt(argv[0]));
        } else {
            server.startServer(Webserver.HTTP_PORT);
        }
        //TODO Auto-generated method stub

    }

}
package webbook.chapter2;
import java.io.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.Socket;

public class Processor extends Thread {
    private PrintStream out;
    private InputStream input;

    public static final String WEB_ROOT=
            "F:\\javaxuexilianxilicheng\\webserver\\htdocs";

    public Processor(Socket socket) {
        try {
            input=socket.getInputStream();
            out=new PrintStream(socket.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void run() {
        try {
            String fileName=parse(input);
            readFile(fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String parse(InputStream input) throws IOException {
        BufferedReader in=new BufferedReader(new
                InputStreamReader(input));
        String inputContent=in.readLine();
        if (inputContent==null||inputContent.length()==0) {
            sendError(400,"Client invoke error");
            return null;
        }

        String request[]=inputContent.split(" ");
        if(request.length !=3) {
            sendError(400,"Client invoke error");
            return null;
        }

        String method=request[0];

        String fileName=request[1];

        String httpVersion=request[2];
        System.out.println("Method:"+method+",file name:"
        +fileName +", HTTP version:"+httpVersion);
        return fileName;
    }

    public void readFile(String fileName) throws IOException {
        File file=new File(Processor.WEB_ROOT+fileName);
        if (!file.exists()) {
            sendError(404,"File Not Found");
            return;
        }

        InputStream in=new FileInputStream(file);
        byte content[]=new byte[(int) file.length()];
        in.read(content);
        out.println("HTTP/1.1 200 sendFile");
        out.println("Content-length:"+content.length);
        out.println();
        out.write(content);
        out.flush();
        out.close();
        in.close();
    }

    public void sendError(int errNum,String errMsg) {
        out.println("HTTP/1.1"+errNum+" "+errMsg);
        out.println("Content-type:text/html");
        out.println();
        out.println("<html>");
        out.println("<head><title>Error"+errNum+"--"+errMsg+"</title></head>");
        out.println("<h1"+errNum+" "+errMsg+"</h1>");
        out.println("</html>");
        out.println();
        out.flush();
        out.close();
    }


}

启动程序,监听端口如下:

本机的IP地址为:172. 30. 77. 25

下面是Python代码,用来连接服务器:

__author__ = 'Administrator'
import socket
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.settimeout(1)
try:
    sk.connect(('172.30.77.25',8040))
    print 'Server port 8040 OK!'
except Exception:
    print 'Server port 8040 not connect!'
sk.close()

运行结果为:
Python判断远端服务器(本机Java服务器程序)端口是否通_第1张图片

灵活运用各种语言的优势,才能创造属于自已的一片天空,加油!

你可能感兴趣的:(java,python,web服务器)