import java.net.*; import java.io.*; public class Client { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 9500); DataInputStream so = new DataInputStream(s.getInputStream()); System.out.println(so.readUTF()); FileOutputStream f = new FileOutputStream("./File/lx.mp3"); int p; System.out.println("please wait........"); while ((p = so.read()) != -1) { f.write(p); } s.close(); so.close(); f.flush(); f.close(); System.out.println("complete!"); } catch (IOException e) { System.out.println("file transfer failed!"); } } } public class Server { private static int port = 9500; public static void main(String[] args) throws Exception { ServerSocket s = new ServerSocket(port); while (true) { Socket s1 = s.accept(); System.out.println("Client connection success!"); DataOutputStream so = new DataOutputStream(s1.getOutputStream()); so.writeUTF("FileName:Z.mp3" + "\n" + "ServerIp:" + s.getInetAddress() + "\n" + "ServerPort:" + s.getLocalPort()); FileInputStream f = new FileInputStream("F:/java/javacs/Z.mp3"); int b = 0; while ((b = (f.read())) != -1) { so.write(b); } s.close(); f.close(); s1.close(); so.flush(); so.close(); } } }
时间: 2024-02-14 21:23:38 浏览: 69
这段代码是一个简单的 Java 程序,用于实现文件传输的功能。其中,Server 类是服务端,它会监听指定的端口(9500),等待客户端的连接。一旦有客户端连接成功,它会向客户端发送文件的信息(文件名、服务器 IP 和端口等),然后读取指定文件的内容,将文件内容发送给客户端。而 Client 类是客户端,它连接到指定的服务器 IP 和端口,接收服务器发送的文件信息以及文件内容,并将文件内容保存到本地的指定路径下。需要注意的是,在运行该程序之前,需要确保指定的文件(F:/java/javacs/Z.mp3)存在且可读写。
相关问题
已知服务器的框图结构package extendPack; /* 范例名称:简单的client/server程序 * 源文件名称:TestClient.java/TestServer.java * 要 点: * 1. Java Socket编程步骤 * 2. Socket/ServerSocket类用法 * 3. 通过Socket对象可以获取通信对方Socket的信息 */ import java.net.*; import java.io.*; public class TestServer { public static void main(String args[]) { … … } }。以及客户端的框图结构package extendPack; /* 范例名称:简单的client/server程序 * 源文件名称:TestClient.java/TestServer.java * 要 点: * 1. Java Socket编程步骤 * 2. Socket/ServerSocket类用法 * 3. 通过Socket对象可以获取通信对方Socket的信息 */ import java.net.*; import java.io.*; public class TestClient { public static void main(String args[]) { … … } }然后执行下列要求。要求:构建一个可循环接受客户端连接请求的网络服务器,向客户端程序发送内容为:“Hello," + 主机地址 + "port#" + 端口号 + "bye-bye!”,然后关闭与该客户端的连接。客户端程序向服务程序发出连接请求,在连接建立后接收从服务器发过来的信息,在屏幕上打印出来。注意:应先运行服务器,在执行客户端。
好的,根据你提供的服务器和客户端代码,我可以帮你实现该要求。以下是服务器端和客户端的具体实现代码:
服务器端代码:
```java
package extendPack;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {
public static void main(String args[]) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端已连接:" + socket.getInetAddress() + ":" + socket.getPort());
OutputStream outputStream = socket.getOutputStream();
String message = "Hello," + socket.getInetAddress() + "port#" + socket.getPort() + "bye-bye!";
outputStream.write(message.getBytes("UTF-8"));
outputStream.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
客户端代码:
```java
package extendPack;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class TestClient {
public static void main(String args[]) {
try {
Socket socket = new Socket("localhost", 8888);
System.out.println("已连接服务器:" + socket.getInetAddress() + ":" + socket.getPort());
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String message = new String(buffer, 0, length, "UTF-8");
System.out.println("接收到服务器的信息:" + message);
inputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
注意:在运行客户端之前,应先运行服务器。
逐行分析解释下面代码:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class Client { public static void main(String[] args) { try { Socke
这段代码是一个Java程序的客户端示例,用于与服务器进行通信。我们来逐行分析:
```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
```
这部分代码导入了Java中用于网络编程的库和输入输出类。
```
public class Client {
```
定义了一个名为Client的类。
```
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8080);
```
定义了一个main方法,程序从这里开始执行。try块中使用Socket类连接到一个服务器,Socket类的构造函数需要指定服务器的主机名和端口号。
```
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
```
创建了一个输入流和一个输出流,用于向服务器发送数据和接收数据。这里使用了Java的字符流,包装了底层的字节流。
```
BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
```
创建了一个用户输入流,用于从控制台读取用户输入。
```
String userInputStr;
while ((userInputStr = userInput.readLine()) != null) {
out.println(userInputStr);
System.out.println("echo: " + in.readLine());
}
```
建立一个while循环,读取用户输入并向服务器发送数据。每次写入数据后,程序会等待服务器响应并将响应打印到控制台。
```
in.close();
out.close();
socket.close();
```
关闭了所有的流和Socket连接。
完整的代码如下:
```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8080);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
String userInputStr;
while ((userInputStr = userInput.readLine()) != null) {
out.println(userInputStr);
System.out.println("echo: " + in.readLine());
}
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
阅读全文