java客户端如何循环等待服务器流的输入
时间: 2024-01-28 11:05:12 浏览: 19
Java客户端可以使用输入流(InputStream)从服务器接收数据。为了循环等待服务器流的输入,可以在一个while循环中使用read()方法读取输入流中的数据,如果返回-1则表示输入流已经结束,可以退出循环。以下是一个简单的示例代码:
```java
try {
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
// 循环等待服务器流的输入
while ((len = inputStream.read(buffer)) != -1) {
String data = new String(buffer, 0, len);
// 处理接收到的数据
System.out.println("Received: " + data);
}
} catch (IOException e) {
e.printStackTrace();
}
```
在以上代码中,我们使用InputStream的read()方法读取输入流中的数据,当read()方法返回-1时,表示输入流已经结束,退出循环。注意,这里的buffer大小要足够大,以免数据被截断。
相关问题
Java实现客户端与服务器的聊天
要实现Java客户端与服务器的聊天,可以使用Socket套接字来建立通信连接。下面是一个简单的示例代码:
服务端:
```java
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8888);
} catch (IOException e) {
System.err.println("Could not listen on port: 8888.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));
String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {
outputLine = "Server: " + inputLine;
out.println(outputLine);
if (outputLine.equals("Server: Bye."))
break;
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
```
客户端:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket clientSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
clientSocket = new Socket("localhost", 8888);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: localhost.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: localhost.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("Server says: " + in.readLine());
if (userInput.equals("Bye."))
break;
}
out.close();
in.close();
stdIn.close();
clientSocket.close();
}
}
```
以上代码中,服务端创建一个ServerSocket实例并绑定到指定的端口,等待客户端连接。客户端创建一个Socket实例并连接到服务端。客户端和服务端都可以通过输入和输出流来发送和接收数据。在示例中,客户端从标准输入读取用户输入并发送到服务端,服务端接收到数据后将其转发回客户端。当客户端发送“Bye.”时,程序结束通信。
java客户端登陆服务器用户名验证客户端和服务器端的代码演示
好的,以下是一个简单的 Java 客户端和服务器端的演示代码,用于验证客户端登陆服务器的用户名:
## 服务器端代码
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端已连接,地址:" + socket.getRemoteSocketAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String username = in.readLine();
if (username.equals("admin")) {
out.println("欢迎登陆!");
} else {
out.println("用户名不正确!");
}
socket.close();
}
}
}
```
## 客户端代码
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 9999);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入用户名:");
String username = br.readLine();
out.println(username);
String response = in.readLine();
System.out.println(response);
socket.close();
}
}
```
以上代码实现了一个简单的用户名验证功能,当客户端输入用户名后,向服务器发送用户名,服务器接收后判断是否为 "admin",如果是,则返回欢迎信息,否则返回错误信息。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)