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网络通信的方法。
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实现一个回声服务器,就是服务器会将客户端发送过来的数据传回给客户端。
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端口,然后将此端口发送给对方,
然后就可以想办法连接了.
6. 用Java写了个很简单的P2P聊天程序,但其中关于TCP\IP、UDP过程有些疑问。
局域网一般不会 丢包的.. 要不你直接tcp发信息
怕丢包 一般都是 三次握手呗 学tcp协议的时候不是讲过的呗
http://baike.baidu.com/view/1003841.htm 看看呗
7. p2p网贷用Java语言开发的吗
可以用Java,也可以用其他的语言,不过大多数用的是Java开发的。迪蒙网贷系统就是用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”;