我試圖創建「多客戶端 - 單服務器」連接。 我的客戶機打開連接,並在服務器端,我在服務器端我已經創建ListArray的ServerSocket的每個ONF人我纏繞在線程創建來自ServerSocket的套接字驗證Java
Client clt = new Client("127.0.0.1", 9000);
clt.openConn();
...
public Client(String serverAddress, int serverPort) {
this.serverAddress = serverAddress;
this.serverPort = serverPort;
}
try {
this.clientSocket = new Socket(this.serverAddress, this.serverPort);
this.clientSocket.setKeepAlive(true);
this.clientSocket.setSoTimeout(0);
oos = new DataOutputStream(this.clientSocket.getOutputStream());
ois = new DataInputStream(this.clientSocket.getInputStream());...}
...
。
ServerSocket serverSocket = null ;
Socket clientSocket;
boolean listening = true;
ArrayList threadList = new ArrayList();
Iterator itSrvThr;
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
System.err.println("Could not listen on port: " + port + ".");
System.exit(-1);
}
while (listening) {
clientSocket = serverSocket.accept();
ServerThread srvThread = new ServerThread(clientSocket);
srvThread.start();
`...`
}
其中
ServerThread extends Thread
{...
public void run() {
this.ois = new DataInputStream(socket.getInputStream());
this.oos = new DataOutputStream(socket.getOutputStream());
}
}
我的程序發送和接收對象(我稱他們爲「Datagramm」),這是某種包裝的文件和字符串(讓我們說,這是對於某一國語言客戶端服務器)
現在關於我有問題。我必須在每次需要從服務器端測試「活着」套接字時進行驗證...... 我試圖在ArrayList中出現新元素時進行此驗證,但它給我帶來了「Datagramm's」發送
itSrvThr = threadList.iterator();
while (itSrvThr.hasNext()) {
ServerThread st = (ServerThread) itSrvThr.next();
boolean stoppedSocket = st.getStopped();
if (stoppedSocket) {
st.stop();
itSrvThr.remove();
}else {??? resolution???}
stoppedSocket - 這是一個值,它顯示程序關閉客戶端站點的套接字。
老實說,我只用了幾個星期的插座和線程,這就是爲什麼每個幫助和評論家都可以接受。 ... 感謝您的回答,但我在編碼心跳問題上存在問題。首先,心跳的位置必須放在服務器端。
*問題是什麼?*如果套接字未被「停止」,您似乎在問怎麼辦。這是正常情況 - 你只是繼續使用它。困難的情況是決定它何時*停止。這是什麼? – EJP 2012-07-06 13:35:24