看板 java 關於我們 聯絡資訊
※ 引述《superkeller (什麼都不管)》之銘言: : 程式po上來看看 : 有可能你對socket同時建了二個outputstream(照理說只有一個refference) : 我學藝不精,謹供參考. : ※ 引述《del680202 (飄落的櫻花)》之銘言: : : 小弟想寫一個模擬聊天室的功能 : : 我client的類別有一個Socket : : 我一開始先用Botton1他跟Server溝通 通知Server 使用者登入 : : 之後我Socket沒有關他 希望保持用同一個Socket來跟Server作溝通 : : 但是我想再次用Botton 呼叫 Socket.getOutputStream的方法寫資料給Server的時候 : : 他卻發生SocketException的例外 : : 似乎是說我的Socket已經關閉 : : 但是Connection卻還保持著 : : 但是我並沒有做close的動作... : : 請問是為什麼? 這是client的 部分程式碼 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: try{ client=new Socket("127.0.0.1",44445); // client.connect(client.getRemoteSocketAddress()); dos=new ObjectOutputStream(client.getOutputStream()); dos.writeInt(1); dos.writeObject(name+":"+this.jTextField2.getText()); //------------------------- Send end /* this.jTextArea1.append(client.getRemoteSocketAddress()+""); dis=new ObjectInputStream(client.getInputStream()); String aline=(String)dis.readObject(); this.jTextArea1.append(aline+"\n"); //------------------------ Read end dis.close();*/ dos.close(); client.close(); }catch(Exception e){ this.jTextArea1.append(e.toString());} } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: try{ client=new Socket("127.0.0.1",44445); // client.connect(client.getRemoteSocketAddress()); dos=new ObjectOutputStream(client.getOutputStream()); dos.writeInt(1); dos.writeObject(name+":"+this.jTextField2.getText()); //------------------------- Send end /* this.jTextArea1.append(client.getRemoteSocketAddress()+""); dis=new ObjectInputStream(client.getInputStream()); String aline=(String)dis.readObject(); this.jTextArea1.append(aline+"\n"); //------------------------ Read end dis.close();*/ dos.close(); client.close(); }catch(Exception e){ this.jTextArea1.append(e.toString());} private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: try{ client=new Socket("127.0.0.1",44445); dos=new ObjectOutputStream(client.getOutputStream()); name=this.jTextField1.getText(); dos.writeInt(0); dos.writeObject(this.jTextField1.getText()); //-------------------------------------------- dos.close(); ObjectInputStream dis=new ObjectInputStream(client.getInputStream()); this.jTextArea1.append((String)dis.readObject()); // client.close(); }catch(Exception e){ this.jTextArea1.setText(e.toString()+"QQ"); } this.jPanel1.setVisible(false); this.jPanel2.setBounds(0,0,400,400); this.jPanel2.setVisible(true); } 某些部分註解起來 是測試用的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.225.116.220