2010-05-09 176 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