欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
通過無線電跳頻技術想到的端口跳變通信
[打印本頁]
作者:
liuyy
時間:
2015-1-11 19:49
標題:
通過無線電跳頻技術想到的端口跳變通信
server.java
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class server {
public static void main(String[] args) throws Exception {
// 創建服務器端的socket對象
ServerSocket ss = new ServerSocket(1989);
// 監聽連接
Socket socket = ss.accept();
// 直到連接建立好之后代碼才會往下執行
System.out.println("客戶端已連接...");
// 獲得服務器端的輸入流,從客戶端接收信息
InputStream is = socket.getInputStream();
// 服務器端的輸出流,向客戶端發送信息
OutputStream os = socket.getOutputStream();
// 接收客戶端的初始握信息
byte[] buffer = new byte[200];
int length = 0;
length = is.read(buffer);
String str = new String(buffer, 0, length);
System.out.println("客戶端握手連接口令為:" + str);
// 需要使用跳端口發送的數據
byte[] buffer1 = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n' };
for (int i = 0; i < 14; i++) {
// 一個標準的通信數據封包
byte[] fengbao = new byte[3];// 2字節端口好1字節附加數據
// 隨機生成下次連接的端口號,必須保證端口號范圍在1024~65535之間減少不必要的碰撞
int nexthost = new Random().nextInt(60000) + 1;
if (nexthost <= 1024)
nexthost += 1024;
// 封裝一個通信數據包
fengbao[0] = buffer1[i]; // 填充附加數據
byte[] nexthost_byte = toByteArray(nexthost, 2);// 整形數據轉換為字節數組
fengbao[1] = nexthost_byte[0];// 填充下次連接端口號
fengbao[2] = nexthost_byte[1];
// 服務器端的輸出
os.write(fengbao);// 發送一個3字節的標準通信數據包
// 釋放此次連接用到資源
is.close();
os.close();
socket.close();
// 準備開始下一次跳端口連接
if(i<13)
{
ss = new ServerSocket(nexthost);
System.out.println("等待客戶端下一次連接...............");
socket = ss.accept();
System.out.println("客戶端已連接此次連接端口號為:" + nexthost);
is = socket.getInputStream();
os = socket.getOutputStream();
}
}
}
// 將一個iArrayLen長度的整型數據轉換為數組類型字節數組的低位是整型的低字節位
public static byte[] toByteArray(int iSource, int iArrayLen) {
byte[] bLocalArr = new byte[iArrayLen];
for (int i = 0; (i < 4) && (i < iArrayLen); i++) {
bLocalArr[i] = (byte) (iSource >> 8 * i & 0xFF);
}
return bLocalArr;
}
// 將byte數組bRefArr轉為一個整數,字節數組的低位是整型的低字節位
public static int toInt(byte[] bRefArr, int iArrayLen) {
int iOutcome = 0;
byte bLoop;
for (int i = 0; i < iArrayLen; i++) {
bLoop = bRefArr[i];
iOutcome += (bLoop & 0xFF) << (8 * i);
}
return iOutcome;
}
}
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
client.java
public class client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("192.168.0.61", 1989);
// 客戶端的輸出流
OutputStream os = socket.getOutputStream();
// 將握手口令信息寫入流,把這個信息傳遞給服務器
os.write("你好服務端測試下跳端口通信...".getBytes());
// 從服務器端接收信息
InputStream is = socket.getInputStream();
for(int i=0;i<14;i++)
{
byte[] fengbao = new byte[3];
byte[] host = new byte[2];
int nexthost;
is.read(fengbao);
host[0]=fengbao[1];
host[1]=fengbao[2];
nexthost=toInt(host,2);
System.out.println("下次連接端口為為:"+nexthost+"此次連接收到的附加數據為:"+(char)fengbao[0]);
//釋放此次連接用到的資源
is.close();
os.close();
socket.close();
//準備開始下一次跳端口連接
if(i<13)
{
socket = new Socket("192.168.0.61", nexthost);
os = socket.getOutputStream();
is = socket.getInputStream();
}
}
}
//將一個iArrayLen長度的整型數據轉換為數組類型字節數組的低位是整型的低字節位
public static byte[] toByteArray(int iSource, int iArrayLen) {
byte[] bLocalArr = new byte[iArrayLen];
for (int i = 0; (i < 4) && (i < iArrayLen); i++) {
bLocalArr[i] = (byte) (iSource >> 8 * i & 0xFF);
}
return bLocalArr;
}
// 將byte數組bRefArr轉為一個整數,字節數組的低位是整型的低字節位
public static int toInt(byte[] bRefArr,int iArrayLen) {
int iOutcome = 0;
byte bLoop;
for (int i = 0; i <iArrayLen; i++) {
bLoop = bRefArr[i];
iOutcome += (bLoop & 0xFF) << (8 * i);
}
return iOutcome;
}
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1