所以我只是尝试从套接字读取文本,我做了以下事情:
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函数和东西,那么如何将输出打印为文本?
答案 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);
}