[英]Threads & networking issue
給出以下代碼:
Client c1 = new Client();
c1.connect("127.0.0.1",1300);
連接功能:
public void connect(String serverName, int port)
{
try {
Socket socket = new Socket(serverName,port);
connection = new ConnectionProxy(socket);
connection.start();
}
catch(IOException e)
{
e.printStackTrace();
}
}
( ConnectionProxy
類擴展了Thread
):
public class ConnectionProxy extends Thread {
private Socket socket;
private InputStream is;
private OutputStream os;
private StringConsumer client;
public ConnectionProxy(Socket socket)
{
this.socket = socket;
try {
is = socket.getInputStream();
os = socket.getOutputStream();
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run () {
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
while (socket != null)
{
try {
String msg = dis.readUTF();
System.out.println(msg);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
我正在嘗試進行聊天,發現很難將客戶端編寫的消息發送給所有當前連接的客戶端。
我該怎么辦? 我應該在服務器端保存每個對象(例如c1)的引用,還是應該在服務器端保存該ConnectionProxy
線程? 如果沒有,我該如何正確而有效地實施呢?
希望得到一些幫助! 謝謝!
在沒有太多代碼的情況下,我將概述您要實現目標所需要做的事情。
在您的server
:
client
對象的array
或類似內容 client
類中實現send()
函數 broadcast()
函數,該函數遍歷客戶端列表並向每個客戶端發送消息(使用上述send()
函數) clients
,否則嘗試發送給它們時會遇到麻煩。 在您的client
:
server
(使服務器更容易將您卸下) 服務器應為每個傳入的連接創建一個新的客戶端處理程序線程。
例如,在服務器端嘗試以下操作:
ServerSocket server = new ServerSocket(port);
while (true) {
Socket client = server.accept();
//add incoming client to connected clients vector.
HandleClient c = new HandleClient(client);
clients.add(c);
}
在將客戶創建並存儲到客戶向量中之后,可以在HandleClient類run()方法上實現bufferReader(同樣不是必須的)以獲取客戶文本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.