我在java中找到了一个简单程序的例子,它假设可以在Java中实现客户端 - 服务器示例。
客户代码:
import java.io.*;
import java.net.*;
public class ClientDemo {
public static void main(String[] args) {
try {
Socket sock = new Socket ("127.0.0.1", 4321);
DataInputStream input = new DataInputStream(sock.getInputStream());
boolean more_data = true;
while (more_data) {
String line = input.readLine();
if(line==null) {
more_data = false;
}
else {
System.out.println(line);
}
}
}
catch (IOException e) {
}
}
}
服务器代码:
import java.io.*;
import java.net.*;
public class SimpleServer
{
public static void main(String[] args)
{
try
{
ServerSocket server = new ServerSocket (4321);
Socket sock = server.accept();
DataInputStream inp = new DataInputStream (sock.getInputStream());
PrintStream out = new PrintStream (sock.getOutputStream());
output.println("server message");
output.println("QUIT to Quit");
boolean more_data = true;
while (more_data)
{
String line = inp.readLine();
if(line==null)
{
more_data = false;
}
else
{
output.println("Server:" +line+"\n");
if(line.trim().equals("Exit")
{
more_data = false;
}
}
}
sock.close();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
首先运行服务器然后运行客户端时,我收到欢迎消息,但是当在客户端控制台中输入文本然后按回车键时,没有任何反应。
我尝试在BufferedInputStream中替换DataInputStream,就像它说readline被弃用的文档一样,但是同样的行为,加上我试图用nextLine更改为scanner对象,同样的行为也是如此。
您的意见将非常受欢迎。
答案 0 :(得分:0)
这是因为您的客户甚至没有尝试从控制台读取。它只从套接字读取。
答案 1 :(得分:0)
试试这个客户端。并看看你的服务器。它停在Exit
而不是QUIT
更新
我已经更改了代码,现在我必须更改我的名字; - )
客户端非常非常简单,没有人应该使用它。客户端必须知道服务器将发送多少行。 如果没有其他线程,就无法等待未知的线数。
import java.io.*;
import java.net.*;
public class ClientDemo {
public static void main(String[] args) {
try {
Socket sock = new Socket("127.0.0.1", 4321);
// Build a Buffered Reader - it is easier to read complete line
BufferedReader input = new BufferedReader(new InputStreamReader(sock.getInputStream()));
// After connecting we read the first 2 line
// We know that the server send 2 lines
System.out.println(input.readLine());
System.out.println(input.readLine());
// Wen must have a reader for our inputs
InputStreamReader consoleReader = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(consoleReader);
while (true) {
// read one line from the console
String inline = in.readLine();
inline += "\n";
// send the line to the server
sock.getOutputStream().write(inline.getBytes());
sock.getOutputStream().flush();
// Wait for server response - we know that we get 2 lines
for (int i = 0; i < 2; i++) {
String response = input.readLine();
if (response == null || inline.equals("Exit")) {
break;
} else {
System.out.println(response);
}
}
}
} catch (IOException e) {
}
}
}