【问题标题】:TCP socket communicationTCP套接字通信
【发布时间】:2010-05-09 15:54:19
【问题描述】:

我正在用 java 创建一个聊天。 我在一个对象中有一个方法(onMouseRelease),它创建一个 tcp 服务器并等待这样的套接字:

 ServerSocket server = new ServerSocket(port);
 Socket channel = server.accept();

现在我想创建一个线程来循环并从套接字读取数据,这样一旦另一端的用户向我发送了一个字符串,我就会从套接字中提取数据(或者它被称为数据包?抱歉,我是新手)并更新一个文本框以添加来自套接字(或数据包?)的附加字符串。

我不知道如何从套接字(/packet)读取(提取)信息,然后将其更新到称为 userOutput 的 JTextArea。以及如何向其他客户端发送字符串,以便它也可以读取新数据并更新其 JTextArea。 据我所知,对于 2 面 TCP 通信,您需要一台计算机来托管服务器 另一个连接(作为客户端),一旦连接建立,客户端也可以从套接字接收新信息。真的吗?请告诉我怎么做。

感谢任何帮助!我知道这有点长,但我搜索了很多并没有理解它(我看到了类似 PrintWriter 但没能理解的东西)。

【问题讨论】:

标签: java sockets tcp stream


【解决方案1】:

你必须做这样的事情;

 InputStream in = new BufferedInputStream(channel.getInputStream());

然后您可以使用循环从套接字中读取字符;

char ch;

 while (!finished) {

    ch = in.read(); //read from socket
    if(ch = -1) {
       //nothing left to read
       finished = true;
    }
    else {
       //do something with ch
    }
 }

如果你愿意,我可以继续吗?

假设我们将传入的字符保存到一个名为 input 的字符串中,以更新您将调用的文本区域;

textArea.setText(input);

要将文本发送回客户端,您可以使用与接收类似的方法,使用输出流;

OutputStream out = new BufferedOutputStream(clientSock.getOutputStream());
out.write(output);

【讨论】:

  • 如果您需要更多详细信息,请告诉我,因为我看到您又问了这个问题。否则,请将我的答案标记为正确。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多