【求助帖】初学java 写了个程序用于一台机器向另一台机器传输文件,客户端一直接收不到服务器的包,求帮忙找错,在线等

ZKeeer ZKeeer 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
已经调试一下午了...
服务器端:
public class thi4server {
public static void main(String[] args) throws IOException {

DatagramSocket filereceive = new DatagramSocket(1234);

byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
System.out.println("****服务器端已经启动,等待客户端发送数据******");
filereceive.receive(packet);// 此方法在接收到数据报之前会一直阻塞
System.out.println("客户端存在,开始向客户端传输文件。");

//System.out.println("我是服务器,客户端说:"+(new String(data, 0, data.length)) + packet.getAddress()+" "+packet.getPort()+" "+packet.getSocketAddress());
/* * 向客户端响应数据 */

String filename = "e:\\ForTransformTest.txt";
File file = new File(filename);
BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));

// 发送文件名和路径
DatagramSocket filesend = new DatagramSocket();
//System.out.println(new String(filename.getBytes(), 0, filename.getBytes().length));
DatagramPacket packet2 = new DatagramPacket(filename.getBytes(), filename.getBytes().length, packet.getAddress(),1234);
filesend.send(packet2);

// 2.从缓冲流中按字节读取文件,打包发送
byte[] data2 = new byte[1024];
while (br.read(data2) != -1) {
//System.out.println(new String(data2,0,data2.length));
DatagramPacket packet3 = new DatagramPacket(data2, data2.length, packet.getAddress(),1234);
filesend.send(packet3);
}
System.out.println("Done!");
filesend.close();
}
}


客户端:
public class thi4client {
public static void main(String[] args) throws IOException {
try {
InetAddress address = InetAddress.getByName("192.168.1.101");
int port = 1234;
byte[] data = "hello".getBytes();

DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
DatagramSocket filesend = new DatagramSocket();

System.out.println("before sending");
filesend.send(packet);
System.out.println("after sending" + " " + packet.getSocketAddress());

DatagramSocket filerecieve = new DatagramSocket(port);
byte[] data2 = new byte[1024];
DatagramPacket packetfilename = new DatagramPacket(data2, data2.length);

System.out.println("before receiving");
filerecieve.receive(packetfilename);//卡在这儿,一直没收到
System.out.println("after receiving");

String filename = new String(data2, 0, packetfilename.getLength());
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filename));

byte[] data3 = new byte[4096];
DatagramPacket packetfilecontain = new DatagramPacket(data3, data3.length);
{
filerecieve.receive(packetfilecontain);
String filecontain = new String(data3, 0, packetfilecontain.getLength());
osw.write(filecontain);
}
osw.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

}
}
...全文
评论
收藏 已收藏
分享
返回顶部
ZKeeer
Java 51,407 成员 86,126 内容