Socket 長連接 短連接 心跳 JAVA SOCKET編程
來源:程序員人生 發布時間:2014-11-28 08:50:27 閱讀次數:5202次
簡單解釋就是:
短連接:建立連接,發送數據包,關閉連接
長連接:建立連接,發送數據包,發送心跳包,發送數據包,發送心跳包,發送心跳包。。。。。。
所以又頻繁的數據收發的話,短連接會頻繁創建TCP連接,而對長連接,則始終用的是同1個TCP連接
package com.tree.demo.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketDemo {
private static final int PORT = 1234;
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(PORT);
Socket s = ss.accept();
System.out.println("這是服務端,監聽本機"+PORT+"端口");
byte[] recData = null;
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
while(true) {
recData = new byte[BUFFER_SIZE];
int r = in.read(recData);
//int r = in.read(recData);
if(r>⑴) {
String data = new String(recData);
if(data.trim().equals("over")) {
s.close();
}
System.out.println("讀取到客戶端發送的來數據:"+data);
out.write("這是服務端發給客戶真個數據:".getBytes());
out.write(recData);
}else {
System.out.println("數據讀取終了!");
s.close();
System.exit(0);
//ss.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上這類服務端讀數據是阻塞式,如果客戶端沒有數據寫過來,服務端就會1直阻塞在那不動
客戶端開啟1個telnet便可測試服務真個socket程序了,固然你也能夠自己寫1個socket客戶端,以下:
package socket;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientSocketDemo {
private static final String HOST = "192.168.8.14";
private static final int PORT = 1234;
public static void main(String[] args) throws UnknownHostException,
IOException {
Socket client = new Socket(HOST, PORT);
OutputStream out = client.getOutputStream();
try {
while (true) {
Thread.sleep(1000);
System.out.println("發送心跳數據包");
out.write("send heart beat data package !".getBytes());
}
} catch (Exception e) {
e.printStackTrace();
out.close();
client.close();
}
}
}
同時這要是1個心跳的實例,心跳只要不出現異常的情況下,可以直接使用client連接發送數據包,不需要new socket新建連接了。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈