Java - 从套接字读取?

时间:2011-09-26 01:35:15

标签: java sockets client

所以我只是尝试从套接字读取文本,我做了以下事情:

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

public class apples{
    public static void main(String args[]) throws IOException{
        Socket client = null;
        PrintWriter output = null;
        BufferedReader in = null;
        try {
               client = new Socket("127.0.0.1", 2235);
               output = new PrintWriter(client.getOutputStream(), false);
               in = new BufferedReader(new InputStreamReader(client.getInputStream()));

               while (true) {
                       System.out.println("Line: " + client.getOutputStream());
               }
        }
        catch (IOException e) {
            System.out.println(e);
        }
        output.close();
        in.close();
        client.close();
    }
}

这会打印出奇怪的数字和类似的东西:

java.net.SocketOutputStream@316f673e

我不太确定所有的Java函数和东西,那么如何将输出打印为文本?

2 个答案:

答案 0 :(得分:5)

看看:

while (true) {
     System.out.println("Line: " + client.getOutputStream());
}

getOutputSteam()返回表示流的对象。您可以使用此对象通过流发送数据。这是一个例子:

BufferedOutputStream out = new BufferedOutputStream(this._socket.getOutputStream());
out.write("hello");
out.flush();

这将通过套接字

发送消息“hello”

要读取数据,您将使用输入流

让我指出 - 这是您正在创建的客户端。您还需要创建一个服务器。使用java的ServerSocket类创建服务器

编辑: 您想在java中编写客户端/服务器应用程序。 您需要实现2个进程:客户端和服务器。 服务器将侦听某个端口(使用ServerSocket)。 客户端将连接到该端口,并发送消息。

您需要了解的第一个对象是ServerSocket。 服务器代码:

ServerSocket s = new ServerSocket(61616);    // this will open port 61616 for listening
Socket incomingSocket = s.accept();    // this will accept new connections

s.accept方法正在阻塞 - 它等待传入连接,并且仅在接受连接后才转到下一行。它创建一个Socket对象。 对于此套接字对象,您将设置输入流和输出流(以发送/接收数据)。

在客户端:

Socket s = new Socket(serverIp, serverPort);

这将打开服务器的套接字。在你的情况下,ip将是“127.0.0.1”或“localhost”(本地机器),端口将是61616。

您将再次设置输入/输出流,以发送/接收消息

如果要连接到已存在的服务器,则只需要实现客户端

你可以在网上找到很多例子

答案 1 :(得分:4)

您没有使用以下代码阅读任何内容

while (true) {
     System.out.println("Line: " + client.getOutputStream());
}

应该是:

String line;
while ((line = in.readLine()) != null) {
  System.out.println("Line: " + line); 
}