可以通過(guò)jms消息通知實(shí)現(xiàn)。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了共和免費(fèi)建站歡迎大家使用!
建議采用spring的Jmstemplate來(lái)實(shí)現(xiàn),spring對(duì)jms做了很好的封裝,使用起來(lái)非常方便,網(wǎng)上也有很多相關(guān)資料供查找學(xué)習(xí)。
根據(jù)你的改了個(gè)!不好意思,其中讀寫(xiě)的思路稍微有點(diǎn)不同!不過(guò)可以做參考!
Server端代碼:
import java.net.*;
import java.io.*;
import java.util.*;
public class TestServer {
ServerSocket s = null;
boolean started = false;//用來(lái)監(jiān)聽(tīng)服務(wù)器是否啟動(dòng)!
ListServerReaderWriter clients = new ArrayListServerReaderWriter();//用來(lái)存放啟動(dòng)的客服端
public static void main(String[] args) {
new TestServer().start();
}
public void start() {
try {
s = new ServerSocket(5050);
started = true;
} catch(SocketException e) {
System.out.println("5050端口正在使用中?。?!請(qǐng)關(guān)掉相關(guān)程序并重新運(yùn)行服務(wù)器!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
int i = 1;
try {
while(started) {
Socket ss = s.accept();
ServerReaderWriter c = new ServerReaderWriter(ss);//建立客服端
System.out.println("第" + i + "個(gè)客服端啟動(dòng)!");
++i;
new Thread(c).start();//啟動(dòng)線程
clients.add(c);
}
} catch (EOFException e) {
System.out.println("客服端被關(guān)閉!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ServerReaderWriter implements Runnable { //建議使用Runnable避免你重寫(xiě)run方法麻煩!
private Socket s;
private DataInputStream dis = null;//注意賦值,養(yǎng)成好習(xí)慣!
private DataOutputStream dos = null;
private boolean bConnected = false;//用于調(diào)用連接成功后的run方法
public ServerReaderWriter(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected = true;
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String str) {
try {
dos.writeUTF(str);
} catch (IOException e) {
clients.remove(this);
System.out.println("有客戶退出!");
}
}
public void run() {
try {
while (bConnected) {
String input = dis.readUTF();
System.out.println(input);
for(int i=0; iclients.size(); ++i) {
ServerReaderWriter c = clients.get(i);
c.send(input);
}
}
} catch(SocketException e) {
System.out.println("一個(gè)客服端已關(guān)閉,請(qǐng)勿再像他發(fā)送信息!");
} catch (EOFException e) {
System.out.println("謝謝使用!");
}catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dis != null) {
dis.close();
}
if (dos != null) {
dos.close();
}
if (s != null) {
s.close();
s = null;
}
//clients.clear();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}
Client端代碼:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class TestClient extends Frame { //用到Frame生產(chǎn)界面比較直觀
Socket s = null;
DataOutputStream dos = null;
DataInputStream dis = null;
private boolean bConnected = false;
TextField tfText = new TextField();
TextArea taContent = new TextArea();
Thread tRecv = new Thread(new ClientReaderWriter());
public static void main(String[] args){
new TestClient().launchFrame();
}
public void launchFrame() {
this.setSize(300, 300); //設(shè)置客服端窗口格式
this.setLocation(400, 300);
add(tfText, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
this.pack();
this.addWindowListener(new WindowAdapter() { //監(jiān)聽(tīng)窗口關(guān)閉事件
public void windowClosing(WindowEvent arg0) {
disconnect();
System.exit(0);
}
});
tfText.addActionListener(new TFListener());
setVisible(true);
connect();
tRecv.start();
}
public void connect() {
try {
s = new Socket("127.0.0.1", 5050); //依據(jù)自己的服務(wù)器,我這里用的localhost
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
System.out.println("連接服務(wù)器!");
bConnected = true;
} catch(ConnectException e) {
System.out.println("請(qǐng)檢查服務(wù)器是否啟動(dòng)!");
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.exit(0);
}
catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() {
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private class TFListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String str = tfText.getText().trim();
tfText.setText("");
try {
dos.writeUTF(str);
if(str.equals("bye")){
System.exit(0);
}
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
class ClientReaderWriter implements Runnable {
public void run() {
try {
while(bConnected) {
String input = dis.readUTF();
taContent.setText(taContent.getText() + input +'\n');
}
} catch (SocketException e) {
System.out.println("輕輕的我走了!Bye-bye!");
} catch (EOFException e) {
System.out.println("我斷網(wǎng)了,再見(jiàn)!");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
步驟一:在桌面找到“網(wǎng)絡(luò)連接”的圖標(biāo),打開(kāi)它,然后在左邊的網(wǎng)絡(luò)任務(wù)上點(diǎn)擊“創(chuàng)建一個(gè)新的連接”按鈕;
步驟二:然后彈出了新建連接向?qū)Т翱冢c(diǎn)擊下一步,在下一步的窗口上選擇“連接到internet”在點(diǎn)擊下一步;
步驟三:在窗口上繼續(xù)選擇“從internet服務(wù)提供商(isp)列表選項(xiàng)”選項(xiàng),點(diǎn)擊"下一步";
步驟四:最后顯示正在完成新建連接向?qū)Т翱诹?,點(diǎn)擊“完成”即可完成新的本地連接的創(chuàng)建了;
步驟五:創(chuàng)建本地連接之后還要對(duì)其進(jìn)行一些網(wǎng)關(guān)和dns設(shè)置才能連接網(wǎng)絡(luò)的,屏幕右下角有個(gè)INTERNET訪問(wèn)圖標(biāo)可以對(duì)其進(jìn)行設(shè)置的。
這個(gè) ,,你可以采用 這樣一種方式, net包中 有相關(guān)的API先發(fā)送一個(gè)請(qǐng)求 到 目的設(shè)備, 然后 判斷是否有回饋信息,,也就是 true or false‘如果有 的話 , 那么可以認(rèn)為它是在線的。反之 不是