【求助帖】初学java 写了个程序用于一台机器向另一台机器传输文件,客户端一直接收不到服务器的包,求帮忙找错,在线等
已经调试一下午了...
服务器端:
客户端:
服务器端:
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();
}
}
}
...全文
相关推荐
retrollerdroid:用于向在另一台机器上运行的模拟器发出请求的 Android 应用程序
**网络通信**:应用通过网络发送请求到另一台机器上的模拟器,这需要掌握TCP/IP协议、HTTP/HTTPS等网络通信协议。5.
java向其他机器写文件 共享机器写文件
### Java向其他机器写文件与共享机器写文件在Java编程中,经常需要实现跨机器文件操作的功能,比如从远程服务器读取文件或向远程服务器写入文件等。
java语言实现服务器客户端聊天界面
在服务器端,我们通常会创建一个ServerSocket监听特定的端口,等待客户端的连接请求。一旦有客户端连接,ServerSocket会返回一个新的Socket对象,用于与这个特定的客户端进行通信。
java socket 简单的文件传输程序
在这个简单的文件传输程序中,我们主要关注的是如何使用Socket进行文件的发送与接收。以下是对该程序可能涉及的关键知识点的详细解释:1.
怎样将java程序打成exe文件运行在无java环境的机器上-图文详解
Java程序的运行需要Java运行环境(JRE),因此如果用户机器上没有安装JRE或JRE版本不兼容,Java程序就无法运行。此外,JRE本身有较大的体积,这会增加程序的分发和网络传输成本。


