2010-05-09 177 views
-1

我正在用java创建一个聊天室。 我有一个方法(onMouseRelease)创建一个TCP服务器,等待这样一个套接字对象内:TCP套接字通信

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

现在我想打一个线程,就会陷入循环,从套接字读取数据,从而使一旦另一端的用户给我一个字符串,我会从套接字中提取数据(还是叫做数据包?对不起,我是的新手)并更新一个文本框以从套接字添加额外的字符串( 或分组?)。

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

任何帮助表示赞赏!我知道这有点长,但我搜索了很多,并没有明白它(我看到了像PrintWriter但没有明白)。

+2

看这个http://java.sun.com/docs/books/tutorial/networking/sockets/clientServer.html – 2010-05-09 16:04:14

回答

2

你将不得不这样做;

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 
    } 
} 

如果您愿意,我可以继续吗?假设我们将传入的字符保存为一个名为的字符串输入,以更新您要调用的文本区域;

textArea.setText(input); 

并发送文本回客户端您将使用类似的方法来接收,使用outputstream;

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

如果您需要更多的细节让我知道,当我再次见到你问的问题。 否则,请将我的答案标记为正确。谢谢。 – Jivings 2010-05-10 16:15:28