关于文件传输的问题 自己写了个类似qq的聊天软件,现欲添加传输文件功能,具体思路如下:传送文件的客户端先将数据发给服务器,然后由服务器转发给接收端,请问怎样在服务器端将发送端与接收端的管道拼接起来,有相关代码的 麻烦粘一小段,我是初学者没经验不会写。。谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主可以看看线程和Socket方面的资料 用UDP连接,在Client1短定位一个文件,并在这个文件上打开一个输入流,吧这个输入流传给另一个Client2,这样便可传送数据 //FileServer.javaimport java.net.*;import java.io.*;import java.util.zip.GZIPOutputStream;public class FileServer{ int port = 2345; ServerSocket serverSocket; public FileServer() { try { serverSocket = new ServerSocket(port); System.out.println("start server at port " + port); while (true) { Socket client = serverSocket.accept(); System.out.println("Connect: " + client.getInetAddress()); DataOutputStream out = new DataOutputStream(client.getOutputStream()); GZIPOutputStream gout = new GZIPOutputStream(out); FileInputStream fileIn = new FileInputStream("h:\\Readme.txt"); //发送的文件 byte[] buffer = new byte[1024]; int length; while ((length = fileIn.read(buffer)) != -1) { gout.write(buffer, 0, length); } gout.close(); fileIn.close(); client.close(); System.out.println("Send success"); } } catch (IOException ex) { } } public static void main(String[] args) { new FileServer(); }}//FileClient.javaimport java.net.*;import java.io.*;import java.util.zip.GZIPInputStream;public class FileClient{ int port = 2345; String host = "localhost"; Socket socket; public FileClient() { try { socket = new Socket(InetAddress.getByName(host), port); DataInputStream in = new DataInputStream(socket.getInputStream()); GZIPInputStream gin = new GZIPInputStream(in); //压缩输入流 FileOutputStream fileOut = new FileOutputStream("h:\\Read.txt"); //文件保存位置 byte[] buffer = new byte[1024]; int length; while ((length = gin.read(buffer)) != -1) { fileOut.write(buffer, 0, length); } System.out.println("Received Success!"); gin.close(); socket.close(); fileOut.close(); } catch (IOException ex) { } } public static void main(String[] args) { new FileClient(); }} 为什么不直接发送给对方,点对点的形式,还要经过服务端呢? 当用户点发送文件时,实现监听:执行DatagramSocket实现的点对点传送方法. (也就是说客户端有DatagramSocket实现的这样的一个方法,和接受的方法,并且是由监听器触发的) 如果是要实现你的思想:传送文件的客户端先将数据发给服务器,然后由服务器转发给接收端.就有些绕弯路了.当客户发送文件到服务端时,服务端应该截取(从用户按下发送文件的监听器得到)到客户端想要发送这个文件给谁的端口和IP,既然有地址了再用DatagramSocket,DatagramPacket封装再发送. 同时客户端要已经实现了的DatagramSocket,DatagramPacket方法接受.大体想法就是这样. java如何自定义方法实现四舍五入? 求解机器人按指令移动 swing jpanel 重绘 java如何关闭一个在运行的exe文件 abstract 的类中是不是允许定义私有成员?有什么用呢? 构造函数问题 请问,java怎么做360度的展示照片啊???谢谢 基于Socket的代理服务器的问题 有谁会用JDK中的native2ascii命令 ***送分了??????怎样选定多个JLabel? 用jxl 取excel中 货币格式 的问题 那里可以下到更多的jdk6的源代码
import java.net.*;
import java.io.*;
import java.util.zip.GZIPOutputStream;
public class FileServer
{
int port = 2345;
ServerSocket serverSocket;
public FileServer()
{
try
{
serverSocket = new ServerSocket(port);
System.out.println("start server at port " + port);
while (true)
{
Socket client = serverSocket.accept();
System.out.println("Connect: " + client.getInetAddress());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
GZIPOutputStream gout = new GZIPOutputStream(out);
FileInputStream fileIn = new FileInputStream("h:\\Readme.txt"); //发送的文件
byte[] buffer = new byte[1024];
int length;
while ((length = fileIn.read(buffer)) != -1)
{
gout.write(buffer, 0, length);
}
gout.close();
fileIn.close();
client.close();
System.out.println("Send success");
}
}
catch (IOException ex)
{
}
} public static void main(String[] args)
{
new FileServer();
}
}//FileClient.java
import java.net.*;
import java.io.*;
import java.util.zip.GZIPInputStream;
public class FileClient
{
int port = 2345;
String host = "localhost";
Socket socket;
public FileClient()
{
try
{
socket = new Socket(InetAddress.getByName(host), port);
DataInputStream in = new DataInputStream(socket.getInputStream());
GZIPInputStream gin = new GZIPInputStream(in); //压缩输入流
FileOutputStream fileOut = new FileOutputStream("h:\\Read.txt"); //文件保存位置
byte[] buffer = new byte[1024];
int length;
while ((length = gin.read(buffer)) != -1)
{
fileOut.write(buffer, 0, length);
}
System.out.println("Received Success!");
gin.close();
socket.close();
fileOut.close();
}
catch (IOException ex)
{
}
} public static void main(String[] args)
{
new FileClient();
}
}
当客户发送文件到服务端时,服务端应该截取(从用户按下发送文件的监听器得到)到客户端想要发送这个文件给谁的端口和IP,既然有地址了再用DatagramSocket,DatagramPacket封装再发送. 同时客户端要已经实现了的DatagramSocket,DatagramPacket方法接受.大体想法就是这样.