通过EchoClient进行DNS解释

时间:2014-03-24 03:29:01

标签: java bufferedreader streamreader serversocket

我一直在尝试使用Java的Socket类,我遇到了困难。我有三个类:EchoServerTemplate,ConcurrentServer和EchoClient。

我想将一个网站(www.google.com)从客户端发送到服务器,然后让服务器返回IP地址。我认为我非常接近,但我不知道Java中的BufferedStreamer如何运作良好,可以找出错误消息。

这是我所有三个类的代码:

EchoServerTemplate(这是我希望翻译Web地址的地方):

import java.net.*;
import java.io.*;

public class  EchoServerTemplate extends Thread 
{
    public static final int DEFAULT_PORT = 6007;
        public static final int BUFFER_SIZE = 256;
        Socket clientSocket;
                 EchoServerTemplate(Socket cs){
            clientSocket = cs;
        }

    public void run(){
        InputStream fromClient = null;
        OutputStream toClient = null;
                byte[] buffer = new byte[BUFFER_SIZE];
                String printaddress = null;

        try {
                    while(true){
                    PrintWriter pout = new PrintWriter(clientSocket.getOutputStream(), true);
                    fromClient = new BufferedInputStream(clientSocket.getInputStream());
                    try {
                InetAddress address = InetAddress.getByName(fromClient.toString());
                printaddress = address.toString();

                    }
                    catch(UnknownHostException e){
                        System.out.println(e);
                    }
                    toClient = new BufferedOutputStream(clientSocket.getOutputStream());

                while (printaddress != null) {
                                    toClient.write(printaddress.getBytes("UTF-8"));
                    toClient.flush();
                                        printaddress = null;
                }


                fromClient.close();
                toClient.close();
                clientSocket.close();
                    }
                }
        catch (IOException ioe) { 
                    ioe.printStackTrace();}
        }
}

ConcurrentServer:

import java.io.*;
import java.net.*;
public class ConcurrentServer {

    public static final int BUFFER_SIZE = 256;
    public static void main(String[] args) throws IOException {
               try {
            int serverPortNumber = 6007;
                        ServerSocket sock = new ServerSocket(serverPortNumber);

            while (true) {

                         Socket clientSocket  = sock.accept();
                         EchoServerTemplate thread = new EchoServerTemplate(clientSocket);
                         thread.start();    
            }
        }
        catch (IOException ioe) { 
                ioe.printStackTrace();}

    }

}

EchoClient:

import java.io.*;
import java.net.*;

public class EchoClient {
    public static void main(String[] args) throws IOException {

        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            echoSocket = new Socket("127.0.0.1", 6007);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                                        echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: ");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for "
                               + "the connection to the host.");
            System.exit(1);
        }

    BufferedReader stdIn = new BufferedReader(
                                   new InputStreamReader(System.in));
    String userInput;

    while ((userInput = stdIn.readLine()) != null) {
        out.println(userInput);
        System.out.println("IP Address: " + in.readLine());
    }

    out.close();
    in.close();
    stdIn.close();
    echoSocket.close();
    }
}

我之前完成的任务就是让ConcurrentServer重复在客户端上输入的内容。在修改代码时,我可能不小心弄乱了一些东西。以下是我收到的错误消息:

  

运行:www.google.com线程“main”中的异常   java.net.SocketException:连接重置为   java.net.SocketInputStream.read(SocketInputStream.java:189)at   java.net.SocketInputStream.read(SocketInputStream.java:121)at   sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)at   sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)at   sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)at   java.io.InputStreamReader.read(InputStreamReader.java:184)at   java.io.BufferedReader.fill(BufferedReader.java:154)at   java.io.BufferedReader.readLine(BufferedReader.java:317)at   java.io.BufferedReader.readLine(BufferedReader.java:382)at   EchoClient.main(EchoClient.java:31)Java结果:1构建成功   (总时间:4秒)

感谢任何帮助。如果您需要更多信息,请告诉我。

0 个答案:

没有答案