Socket 的方法 getOutputStream() 和 getInputStream()

来源:互联网 发布:nba张伯伦数据 编辑:程序博客网 时间:2024/06/06 12:55

一个非常简单的客户端程序:

import java.io.*;import java.net.*;public class DailyAdviceClient{    public void go() {        try {            Socket s = new Socket("127.0.0.1", 5000);            InputStreamReader streamReader = new InputStreamReader(s.getInputStream());             BufferedReader reader = new BufferedReader(streamReader);            String advice = reader.readLine();            System.out.println("Today you should: " + advice);            reader.close();        }        catch (IOException ex)        {            ex.printStackTrace();        }    }    public static void main(String[] args)    {        DailyAdviceClient client = new DailyAdviceClient();        client.go();    }}

对于 DailyAdviceClient 客户端来说,它是要经过 Socket 从地址为 127.0.0.1.5000 的服务器上取入数据,所以用 socket.getInputStream()
一个非常简单的服务器程序:

import java.io.IOException;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class AdviceServer {    String[] adviceList = {"Take smaller bites", "Go for the tight jeans. No they do NOT make you look fat",            "One word: inappropriate", "Just for today, be honest.  Tell your boss what you *really* think",             "You might want to rethink that haircut"};    public void go() {        try {            ServerSocket serverSocket = new ServerSocket(4200);            while(true) {            Socket socket = serverSocket.accept();            PrintWriter printWriter = new PrintWriter(socket.getOutputStream());            String advice = getAdvice();            printWriter.println(advice);            printWriter.close();            System.out.println(advice);            }        } catch (IOException e) {            // TODO: handle exception            e.printStackTrace();        }    }    private String getAdvice() {        int random = (int) (Math.random() * adviceList.length);        return adviceList[random];    }    public static void main(String[] args) {        AdviceServer adviceServer = new AdviceServer();        adviceServer.go();    }}

对于 AdviceServer 服务器应用来说,它要通过 socket 向绑定 4200 端口的客服端传出去数据,所以用 socket.getOutputStream()

总之,看这个用 socket 的类,它是通过 socket 取入数据还是传出数据,取入数据就用 getInputStream() ,传出数据就用 getOutputStream() .