資源簡介
Java P2P聊天服務端源碼,通過NAT打洞技術,借助P2P服務端,采用客戶端程序可以實現客戶端點對點通訊

代碼片段和文件信息
/**
?*?MainServer.java?Nov?23?2009
?*?
?*?Copyright?2009?xwz?Inc.?All?rights?reserved.
?*/
package?xwz.p2p.upd.server;
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.SocketException;
import?java.util.ArrayList;
import?java.util.List;
import?java.util.Timer;
import?xwz.p2p.upd.util.ConnectionClientInfo;
import?xwz.p2p.upd.util.MyProtocol;
import?xwz.p2p.upd.util.StringUtil;
/**
?*?@author?xwz
?*?@version?1.0?Nov?23?2009?11:04:50?PM
?*/
public?class?MainServer?{
//?所有客戶端列表
private?static?List?allClients?=?new?ArrayList();
private?static?DatagramSocket?ds?=?null;?
private?static?P2PSrvframe?p2pframe?=?new?P2PSrvframe();
private?static?MainServer?mainServer?=?new?MainServer();
private?static?Timer?submitTimer?=?new?Timer();
//?開始P2P交換服務(程序起點)
public?static?void?StartP2PServiveChanege()?throws?IOException?{
byte[]?buf?=?new?byte[1024];
DatagramPacket?p?=?new?DatagramPacket(buf?1024);
ds.receive(p);
//?取出信息
String?content?=?new?String(p.getData()?0?p.getLength());
String?ip?=?p.getAddress().getHostAddress();
int?port?=?p.getPort();
//?輸出接收到的數據
if?(!content.startsWith(MyProtocol.HEART))?{
System.out.println(ip?+?“:“?+?port?+?“?>>>>?“?+?content);
}
//?處理控制部分委托給其他方法做
if?(content.startsWith(MyProtocol.LOGIN))?{
dealLogin(ds?p?content);
}?else?if?(content.startsWith(MyProtocol.HEART))?{
dealHeart(ds?p?content);
}?else?if?(content.startsWith(MyProtocol.WANT_TO_CONNECT))?{
notifyPunchHole(ds?p?content);
}?else?if?(content.startsWith(MyProtocol.SUCCESS_HOLE_TO))?{
notifyPunchHoleSuccess(ds?p?content);
}?else?{
dealOther(ds?p?content);
}
}
//?處理登陸請求
private?static?void?dealLogin(DatagramSocket?ds?DatagramPacket?pString?content)?{
ConnectionClientInfo?c?=?new?ConnectionClientInfo();
String[]?clientLogin?=?StringUtil.splitString(contentMyProtocol.SPLITOR);
System.out.println(“clientLogin?“?+?clientLogin.length);
c.setNickname(clientLogin[1]);
c.setIp(p.getAddress().getHostAddress());
c.setPort(p.getPort());
allClients.add(c);
//?獲取所有客戶端連接成字符串
String?listStr?=?MyProtocol.LIST_ONLINE?+?MyProtocol.SPLITOR?+?serialList();
System.out.println(listStr);
for?(ConnectionClientInfo?cif?:?allClients)?{
try?{
DatagramPacket?p2?=?new?DatagramPacket(listStr.getBytes()?listStr.getBytes().length?InetAddress.getByName(cif.getIp())?cif.getPort());
ds.send(p2);
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
//?把列表數據序列化
private?static?String?serialList()?{
String?str?=?““;
for?(ConnectionClientInfo?cif?:?allClients)?{
String?nickname?=?cif.getNickname();
String?ip?=?cif.getIp();
int?port?=?cif.getPort();
String?one?=?ip?+?““?+?port?+?““?+?nickname?+?MyProtocol.SPLITOR;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????358??2010-02-04?17:25??p2pserver\.classpath
?????文件????????385??2010-02-04?17:20??p2pserver\.project
?????文件???????5629??2010-02-22?17:31??p2pserver\src\xwz\p2p\upd\server\MainServer.java
?????文件????????846??2010-02-08?16:15??p2pserver\src\xwz\p2p\upd\server\P2PServerThread.java
?????文件???????8622??2010-02-05?10:28??p2pserver\src\xwz\p2p\upd\server\P2PSrvfr
?????文件???????5722??2010-02-05?10:28??p2pserver\src\xwz\p2p\upd\server\P2PSrvfr
?????目錄??????????0??2010-02-23?09:02??p2pserver\src\xwz\p2p\upd\server
?????文件????????691??2010-02-04?17:21??p2pserver\src\xwz\p2p\upd\util\ConnectionClientInfo.java
?????文件???????1684??2010-02-04?17:21??p2pserver\src\xwz\p2p\upd\util\MyProtocol.java
?????文件????????589??2010-02-04?17:21??p2pserver\src\xwz\p2p\upd\util\StringUtil.java
?????目錄??????????0??2010-02-23?09:02??p2pserver\src\xwz\p2p\upd\util
?????目錄??????????0??2010-02-23?09:02??p2pserver\src\xwz\p2p\upd
?????目錄??????????0??2010-02-23?09:02??p2pserver\src\xwz\p2p
?????目錄??????????0??2010-02-23?09:02??p2pserver\src\xwz
?????目錄??????????0??2010-02-23?09:02??p2pserver\src
?????目錄??????????0??2010-02-23?09:03??p2pserver
-----------?---------??----------?-----??----
????????????????24526????????????????????16
- 上一篇:微信公眾號支付改良版
- 下一篇:宿舍管理系統Java開發,sql數據庫
評論
共有 條評論