最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關(guān)于p2p服務(wù)端java代碼的信息

廣域網(wǎng)實(shí)現(xiàn)p2p文件傳輸 如何實(shí)現(xiàn)nat穿透 求java或C++源代碼

假設(shè)有兩臺分別處于各自的私有網(wǎng)絡(luò)中的主機(jī):A和B;N1和N2是兩個(gè)NAT設(shè)備;S是一個(gè)使用了一個(gè)眾所周知的、從全球任何地方都能訪問得搏拍含到的IP地址的公共服基笑務(wù)器

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有昆玉免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

步驟一:A和B分別和S建立UDP連賀纖接;NAT設(shè)備N1和N2創(chuàng)建UDP轉(zhuǎn)換狀態(tài)并分配臨時(shí)的外部端口號

步驟二:S將這些端口號傳回A和B

步驟三:A和B通過轉(zhuǎn)換好的端口直接聯(lián)系到對方的NAT設(shè)備;NAT設(shè)備則利用先前創(chuàng)建的轉(zhuǎn)換狀態(tài)將分組發(fā)往A和B

源碼已發(fā)送請查收

求javap2p聊天工具代碼

JAVA賀新態(tài)知年-自己動手做QQ(P2P聊天工具含源碼) - Dreamcode ~ ...

區(qū)襲閉答塊拍慧鏈中的消息傳播離不p2p通信 java實(shí)現(xiàn)一個(gè)簡單的p2p通信demo工具: idea jdk1.8 maven1 : idea新建maven項(xiàng)...

基于java的p2p實(shí)現(xiàn)文件共享和傳輸

在JAVA中,發(fā)送和接收多播信息的方法:?

發(fā)送多播信息需經(jīng)歷步驟?

確定發(fā)送的具體信息內(nèi)容?

String msg = "Hello";?

選用專門為多播指定的D類IP地址(224.0.0.1到239.255.255.255),創(chuàng)建一個(gè)多播組?

InetAddress group = InetAddress.getByName("228.5.6.7");?

使用指定的端口(一般選1024以上的端口號)建立多播套接字?

MulticastSocket s = new MulticastSocket(6789);?

加入多播組?

s.joinGroup(group);?

創(chuàng)建一個(gè)數(shù)據(jù)報(bào)封裝多播信息?

DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),?

group, 6789);?

發(fā)送?

s.send(hi);?

接收多播信息的步驟?

開辟接收緩沖區(qū)?

byte[] buf = new byte[1000];?

創(chuàng)建接收數(shù)據(jù)報(bào)?

DatagramPacket recv = new DatagramPacket(buf, buf.length);?

接收?

s.receive(recv);?

注意:以上發(fā)送和接收程序在同一個(gè)文件中實(shí)現(xiàn),若在不同文件中實(shí)現(xiàn)則應(yīng)分別定義多播套接字并加入多播組。?

3.與已知IP和端口的端點(diǎn)通信?

在互聯(lián)網(wǎng)上主要采用TCP和UDP來實(shí)現(xiàn)兩點(diǎn)之間的通信。采用TCP可可靠傳送信息,但花費(fèi)時(shí)間較多;采用UDP可快速傳遞信息,但不能保證可靠傳遞。

JAVA實(shí)現(xiàn)TCP通信的方法 :

利用Socket(InetAddress addr, int port)和 Socket(String host, int port),創(chuàng)建客戶端套接字,利用ServerSocket(int port)創(chuàng)建服務(wù)器端套接字,port端口就是服務(wù)器監(jiān)聽連接請求的端口,通過調(diào)用accept()返回一個(gè)最近創(chuàng)建的Socket對象,該Socket對象綁定了客戶程序的IP地址或端口號。通過調(diào)用Socket的 getInputStream()方法獲得輸入流讀傳送輪伍來的信息,也可能通過調(diào)用Socket的 getOutputStream()方法獲得輸出流來發(fā)送消息。?

 

JAVA實(shí)現(xiàn)UDP通信的方法 :

使用DatagramPacket(byte [] buffer, int length, InetAddress addr, int port) 確定數(shù)據(jù)包數(shù)組、數(shù)組的長度、臘扒或數(shù)據(jù)包的地址和端口信息。使用DatagramSocket()創(chuàng)建客戶端套接字,而服務(wù)器端則采用DatagramSocket(int port),調(diào)用send(DatagramPacket dgp)和 receive(DatagramPacket dgp)來發(fā)送和接收數(shù)據(jù)包。本文設(shè)計(jì)的程序采用UDP。

P2P(Peer-to-Peer 端到端)模型是與C/S(客戶/服務(wù)器)模型相對應(yīng)。基于C/S的用戶間通信需要由服務(wù)器中轉(zhuǎn),在C/S中的服務(wù)器故障將導(dǎo)致整個(gè)網(wǎng)絡(luò)通信的癱瘓此卜。。而基于P2P的用戶間通信則是直接通信,去掉了服務(wù)器這一層,帶來的顯著優(yōu)點(diǎn)是通信時(shí)沒有單一的失敗點(diǎn),一個(gè)用戶的故障不會影響整個(gè)P2P網(wǎng)絡(luò)。本文提供了一種用JAVA實(shí)現(xiàn)P2P網(wǎng)絡(luò)通信的方法。  ?

用java多線程實(shí)現(xiàn)服務(wù)器與客戶端之間的文件傳輸?shù)拇a?。。〖保。。。?/h2>

程序分Server和Client

服務(wù)器端打開偵聽的端口,一有客戶端連衡昌接就創(chuàng)建兩個(gè)新的線程來負(fù)責(zé)這個(gè)連接

一個(gè)負(fù)責(zé)客戶端發(fā)送的信息(ClientMsgCollectThread 類),

另一個(gè)負(fù)責(zé)老攔薯通過該Socket發(fā)送數(shù)據(jù)(ServerMsgSendThread )

Server.java代碼如下:

/*

* 創(chuàng)建日期 2009-3-7

*

* TODO 要更改此生成的文件的模板,請轉(zhuǎn)至

* 窗口 - 首選項(xiàng) - Java - 代碼樣式 - 代碼模板

*/

package faue.MutiUser;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java點(diǎn)虐 .ServerSocket;

import java點(diǎn)虐 .Socket;

/**

* 服務(wù)器端

*

* @author Faue

*/

public class Server extends ServerSocket {

private static final int SERVER_PORT = 10000;

/**

* 構(gòu)造方法,用于實(shí)現(xiàn)連接的監(jiān)聽

*

* @throws IOException

*/

public Server() throws IOException {

super(SERVER_PORT);

try {

while (true) {

Socket socket = super.accept();

new Thread(new ClientMsgCollectThread(socket), "getAndShow"

+ socket.getPort()).start();

new Thread(new ServerMsgSendThread(socket), "send"

+ socket.getPort()).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws IOException {

new Server();

}

/**

* 該類用于創(chuàng)建接收客戶端發(fā)來的信息并顯示的線侍者程

*

* @author Faue

* @version 1.0.0

*/

class ClientMsgCollectThread implements Runnable {

private Socket client;

private BufferedReader in;

private StringBuffer inputStringBuffer = new StringBuffer("Hello");

/**

* 得到Socket的輸入流

*

* @param s

* @throws IOException

*/

public ClientMsgCollectThread(Socket s) throws IOException {

client = s;

in = new BufferedReader(new InputStreamReader(client

.getInputStream(), "GBK"));

}

public void run() {

try {

while (!client.isClosed()) {

inputStringBuffer.delete(0, inputStringBuffer.length());

inputStringBuffer.append(in.readLine());

System.out.println(getMsg(inputStringBuffer.toString()));

}

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

}

}

/**

* 構(gòu)造顯示的字符串

*

* @param line

* @return

*/

private String getMsg(String line) {

return client.toString() + " says:" + line;

}

}

/**

* 該類用于創(chuàng)建發(fā)送數(shù)據(jù)的線程

*

* @author Faue

* @version 1.0.0

*/

class ServerMsgSendThread implements Runnable {

private Socket client;

private PrintWriter out;

private BufferedReader keyboardInput;

private StringBuffer outputStringBuffer = new StringBuffer("Hello");

/**

* 得到鍵盤的輸入流

*

* @param s

* @throws IOException

*/

public ServerMsgSendThread(Socket s) throws IOException {

client = s;

out = new PrintWriter(client.getOutputStream(), true);

keyboardInput = new BufferedReader(new InputStreamReader(System.in));

}

public void run() {

try {

while (!client.isClosed()) {

outputStringBuffer.delete(0, outputStringBuffer.length());

outputStringBuffer.append(keyboardInput.readLine());

out.println(outputStringBuffer.toString());

}

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

}

}

}

}

客戶端:

實(shí)現(xiàn)基于IP地址的連接,連接后也創(chuàng)建兩個(gè)線程來實(shí)現(xiàn)信息的發(fā)送和接收

/*

* 創(chuàng)建日期 2009-3-7

*

*/

package faue.MutiUser;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java點(diǎn)虐 .Socket;

/**

* 客戶端

*

* @author Faue

*/

public class Client {

private Socket mySocket;

/**

* 創(chuàng)建線程的構(gòu)造方法

*

* @param IP

* @throws IOException

*/

public Client(String IP) throws IOException {

try {

mySocket = new Socket(IP, 10000);

new Thread(new ServerMsgCollectThread(mySocket), "getAndShow"

+ mySocket.getPort()).start();

new Thread(new ClientMsgSendThread(mySocket), "send"

+ mySocket.getPort()).start();

} catch (IOException e) {

//e.printStackTrace();

System.out.println("Server.IP:" + IP

+ " port:10000 can not be Connected");

}

}

public static void main(String[] args) throws IOException {

try {

new Client(args[0]);

} catch (Exception e) {

System.out.println("輸入的IP地址錯(cuò)誤");

}

}

/**

* 該類用于創(chuàng)建接收服務(wù)端發(fā)來的信息并顯示的線程

*

* @author Faue

* @version 1.0.0

*/

class ServerMsgCollectThread implements Runnable {

private Socket client;

private BufferedReader in;

private StringBuffer inputStringBuffer = new StringBuffer("Hello");

/**

* 得到Socket的輸入流

*

* @param s

* @throws IOException

*/

public ServerMsgCollectThread(Socket s) throws IOException {

client = s;

in = new BufferedReader(new InputStreamReader(client

.getInputStream(), "GBK"));

}

public void run() {

try {

while (!client.isClosed()) {

inputStringBuffer.delete(0, inputStringBuffer.length());

inputStringBuffer.append(in.readLine());

System.out.println(getMsg(inputStringBuffer.toString()));

}

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

System.exit(0);

}

}

/**

* 構(gòu)造輸入字符串

*

* @param line

* @return

*/

private String getMsg(String line) {

return client.toString() + " says:" + line;

}

}

/**

* 該類用于創(chuàng)建發(fā)送數(shù)據(jù)的線程

*

* @author Faue

* @version 1.0.0

*/

class ClientMsgSendThread implements Runnable {

private Socket client;

private PrintWriter out;

private BufferedReader keyboardInput;

private StringBuffer outputStringBuffer = new StringBuffer("Hello");

/**

* 得到鍵盤的輸入流

*

* @param s

* @throws IOException

*/

public ClientMsgSendThread(Socket s) throws IOException {

client = s;

out = new PrintWriter(client.getOutputStream(), true);

keyboardInput = new BufferedReader(new InputStreamReader(System.in));

}

public void run() {

try {

while (!client.isClosed()) {

outputStringBuffer.delete(0, outputStringBuffer.length());

outputStringBuffer.append(keyboardInput.readLine());

out.println(outputStringBuffer.toString());

}

out.println("--- See you, bye! ---");

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

System.exit(0);

}

}

}

}

如果對您有幫助,請記得采納為滿意答案,謝謝!祝您生活愉快!

vaela


當(dāng)前文章:關(guān)于p2p服務(wù)端java代碼的信息
本文路徑:http://fisionsoft.com.cn/article/ddpspoe.html