基于java的p2p实现文件共享和传输

2024-05-15

1. 基于java的p2p实现文件共享和传输

在JAVA中,发送和接收多播信息的方法:   发送多播信息需经历步骤   确定发送的具体信息内容   String msg = "Hello";   选用专门为多播指定的D类IP地址(224.0.0.1到239.255.255.255),创建一个多播组   InetAddress group = InetAddress.getByName("228.5.6.7");   使用指定的端口(一般选1024以上的端口号)建立多播套接字   MulticastSocket s = new MulticastSocket(6789);   加入多播组   s.joinGroup(group);   创建一个数据报封装多播信息   DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),   group, 6789);   发送   s.send(hi);   接收多播信息的步骤   开辟接收缓冲区   byte[] buf = new byte[1000];   创建接收数据报   DatagramPacket recv = new DatagramPacket(buf, buf.length);   接收   s.receive(recv);   注意:以上发送和接收程序在同一个文件中实现,若在不同文件中实现则应分别定义多播套接字并加入多播组。   3.与已知IP和端口的端点通信   在互联网上主要采用TCP和UDP来实现两点之间的通信。采用TCP可可靠传送信息,但花费时间较多;采用UDP可快速传递信息,但不能保证可靠传递。 
JAVA实现TCP通信的方法 :  利用Socket(InetAddress addr, int port)和 Socket(String host, int port),创建客户端套接字,利用ServerSocket(int port)创建服务器端套接字,port端口就是服务器监听连接请求的端口,通过调用accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。通过调用Socket的 getInputStream()方法获得输入流读传送来的信息,也可能通过调用Socket的 getOutputStream()方法获得输出流来发送消息。  
JAVA实现UDP通信的方法 :  使用DatagramPacket(byte [] buffer, int length, InetAddress addr, int port) 确定数据包数组、数组的长度、数据包的地址和端口信息。使用DatagramSocket()创建客户端套接字,而服务器端则采用DatagramSocket(int port),调用send(DatagramPacket dgp)和 receive(DatagramPacket dgp)来发送和接收数据包。本文设计的程序采用UDP。 
P2P(Peer-to-Peer 端到端)模型是与C/S(客户/服务器)模型相对应。基于C/S的用户间通信需要由服务器中转,在C/S中的服务器故障将导致整个网络通信的瘫痪。。而基于P2P的用户间通信则是直接通信,去掉了服务器这一层,带来的显著优点是通信时没有单一的失败点,一个用户的故障不会影响整个P2P网络。本文提供了一种用JAVA实现P2P网络通信的方法。   

基于java的p2p实现文件共享和传输

2. Java Socket 实现P2P

主动发起的会话的可以看成Client用socket、、被动接受的看成Server用ServerSocket、、、按你的做法、、A既有socket还有ServerSocket、、、socket用来主动连接其他客户端、、、ServerSocket用于监听其他客户端是否发来连接请求

3. java socket编程 是什么协议

Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一。如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的。本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序。 
方法/步骤


Java中的socket编程 下面的部分将通过一些示例讲解一下如何使用socket编写客户端和服务器端的程序。 注意:在接下来的示例中,我将使用基于TCP/IP协议的socket编程,因为这个协议远远比UDP/IP使用的要广泛。并且所有的socket相关的类都位于java.net包下,所以在我们进行socket编程时需要引入这个包。 

写入数据 接下来就是写入请求数据,我们从客户端的socket对象中得到OutputStream对象,然后写入数据后。很类似文件IO的处理代码。 

打开服务器端的socket 

读取数据 通过上面得到的socket对象获取InputStream对象,然后安装文件IO一样读取数据即可。这里我们将内容打印出来。 

使用socket实现一个回声服务器,就是服务器会将客户端发送过来的数据传回给客户端。

java socket编程 是什么协议

4. java socket编程 用在哪里 为什么要用?

进程通信用,建议百度百科

简单的Client/Server程序
1.客户端程序
import java.io.*;import java.net.*;public class TalkClient {    public static void main(String args[]) {        try {            Socket socket = new Socket("127.0.0.1", 4700);            //向本机的4700端口发出客户请求            BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));            //由系统标准输入设备构造BufferedReader对象            PrintWriter os = new PrintWriter(socket.getOutputStream());            //由Socket对象得到输出流,并构造PrintWriter对象            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));            //由Socket对象得到输入流,并构造相应的BufferedReader对象            String readline;            readline = sin.readLine(); //从系统标准输入读入一字符串            while (!readline.equals("bye")) {                //若从标准输入读入的字符串为 "bye"则停止循环                os.println(readline);                //将从系统标准输入读入的字符串输出到Server                os.flush();                //刷新输出流,使Server马上收到该字符串                System.out.println("Client:" + readline);                //在系统标准输出上打印读入的字符串                System.out.println("Server:" + is.readLine());                //从Server读入一字符串,并打印到标准输出上                readline = sin.readLine(); //从系统标准输入读入一字符串            } //继续循环            os.close(); //关闭Socket输出流            is.close(); //关闭Socket输入流            socket.close(); //关闭Socket        } catch (Exception e) {            System.out.println("Error" + e); //出错,则打印出错信息        }    }}2.服务器端程序
import java.io.*;import java.net.*;import java.applet.Applet;public class TalkServer {    public static void main(String args[]) {        try {            ServerSocket server = null;            try {                server = new ServerSocket(4700);                //创建一个ServerSocket在端口4700监听客户请求            } catch (Exception e) {                System.out.println("can not listen to:" + e);                //出错,打印出错信息            }            Socket socket = null;            try {                socket = server.accept();                //使用accept()阻塞等待客户请求,有客户                //请求到来则产生一个Socket对象,并继续执行            } catch (Exception e) {                System.out.println("Error." + e);                //出错,打印出错信息            }            String line;            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));            //由Socket对象得到输入流,并构造相应的BufferedReader对象            PrintWriter os = newPrintWriter(socket.getOutputStream());            //由Socket对象得到输出流,并构造PrintWriter对象            BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));            //由系统标准输入设备构造BufferedReader对象            System.out.println("Client:" + is.readLine());            //在标准输出上打印从客户端读入的字符串            line = sin.readLine();            //从标准输入读入一字符串            while (!line.equals("bye")) {                //如果该字符串为 "bye",则停止循环                os.println(line);                //向客户端输出该字符串                os.flush();                //刷新输出流,使Client马上收到该字符串                System.out.println("Server:" + line);                //在系统标准输出上打印读入的字符串                System.out.println("Client:" + is.readLine());                //从Client读入一字符串,并打印到标准输出上                line = sin.readLine();                //从系统标准输入读入一字符串            } //继续循环            os.close(); //关闭Socket输出流            is.close(); //关闭Socket输入流            socket.close(); //关闭Socket            server.close(); //关闭ServerSocket        } catch (Exception e) {            System.out.println("Error:" + e);            //出错,打印出错信息        }    }}

5. 如何使用java实现tcp的p2p的打洞技术

公网设服务器S, 2p点(P1.P2) 连S,过S双方获取对方公网IP. 
P1 P2都向对方的(公网IP+任意端口)发起连接,当然无任何回应,但是会发生2件事
1 P1 P2都在自己的外网NAT上打了个连接对方的洞,这个洞会保持一会儿.
2 连接的时候S抓取到P1 P2 的NAT端口,然后将此端口发送给对方,
然后就可以想办法连接了.

如何使用java实现tcp的p2p的打洞技术

6. 用Java写了个很简单的P2P聊天程序,但其中关于TCP\IP、UDP过程有些疑问。

局域网一般不会 丢包的..  要不你直接tcp发信息   
   怕丢包 一般都是 三次握手呗  学tcp协议的时候不是讲过的呗   
  http://baike.baidu.com/view/1003841.htm  看看呗

7. p2p网贷用Java语言开发的吗

可以用Java,也可以用其他的语言,不过大多数用的是Java开发的。迪蒙网贷系统就是用Java开发的,相对稳定和安全。

p2p网贷用Java语言开发的吗

8. 用java实现tcp穿越nat,怎么实现,哪位大侠能给个demo,感谢

java使不能实现的,这是网管的问题,要想使外网访问内网,必须使你们的主机与你们要访问的机子建立端口上的映射关系。 
比如建立ftp服务器,让外网访问。必须把内网被访问的机器与主机的21端口绑定。当外网访问你们主机的时间,主机就自动指向你的内网机器。 
访问主机:http://192.168.1.1(假如主机是);尽行路由设置,即网上说的nat设置,单价左边菜单“nat”,在右边会看到虚拟服务配置,名称随便填,填写要开放的机器的ip地址,选择下面的协议为“ftp”;端口自动填好了,最后单击添加就填好了。 

加入你们的主机ip是“202.102.224.13”外部访问时就在浏览器输入: 
"ftp://202.102.224.13";就搞定了; 
被访问及其必须建立ftp服务器,具体建立服务器,可以下载软件,比如“server-u”,设置根据提示看就好了。 
主机ip可以在主机的“系统信息”里面的默认网关看到;主机登录账号密码一般是“guest”;
最新文章
热门文章
推荐阅读