Android 客户机-服务器TCP通信
服务器应该向客户端发送一条消息“Hello::enter QUIT to exit”,然后客户端键入任何文本,服务器在其消息之前添加“From server:”回显客户端文本。 但顺序似乎有点混乱,我似乎找不到在哪里!我一整天都在这上面 这是服务器的代码:Android 客户机-服务器TCP通信,android,sockets,tcp,client,Android,Sockets,Tcp,Client,服务器应该向客户端发送一条消息“Hello::enter QUIT to exit”,然后客户端键入任何文本,服务器在其消息之前添加“From server:”回显客户端文本。 但顺序似乎有点混乱,我似乎找不到在哪里!我一整天都在这上面 这是服务器的代码: import java.net.*; public class Server { public static void main(String[] args) { int nreq = 1;
import java.net.*;
public class Server {
public static void main(String[] args) {
int nreq = 1;
try
{
ServerSocket sock = new ServerSocket (8080);
for (;;)
{
Socket newsock = sock.accept();
System.out.println("Creating thread ...");
Thread t = new ThreadHandler(newsock,nreq);
t.start();
}
}
catch (Exception e)
{
System.out.println("IO error " + e);
}
System.out.println("End!");
}
}
ThreadHandler代码:
import java.io.*;
import java.net.*;
class ThreadHandler extends Thread {
Socket newsock;
int n;
ThreadHandler(Socket s, int v) {
newsock = s;
n = v;
}
// @SuppressWarnings("deprecation")
public void run() {
try {
PrintWriter outp = new PrintWriter(newsock.getOutputStream(), true);
BufferedReader inp = new BufferedReader(new InputStreamReader(
newsock.getInputStream()));
outp.println("Hello :: enter QUIT to exit");
boolean more_data = true;
String line;
while (more_data) {
line = inp.readLine();
if (line == null) {
more_data = false;
} else {
outp.println("From server: " + line + "\n");
if (line.trim().equals("QUIT"))
more_data = false;
}
}
newsock.close();
} catch (Exception e) {
System.out.println("IO error " + e);
}
}
}
和客户端代码:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Client {
// @SuppressWarnings("deprecation")
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
try {
Socket s = new Socket("localhost", 8080);
PrintWriter outp = new PrintWriter(s.getOutputStream(), true);
BufferedReader inp = new BufferedReader(new InputStreamReader(
s.getInputStream()));
boolean more_data = true;
System.out.println("Established connection");
String line;
while (more_data) {
line = inp.readLine();
String userInput = scanner.nextLine();
outp.println(userInput);
if (line == null) {
more_data = false;
} else
System.out.println(line);
}
System.out.println("end of while");
} catch (Exception e) {
System.out.println("IO error " + e);
}
}
}
我正在测试它,所以在我准备让客户端成为Android手机之后——如果可能的话-
更新: 我已将服务器的代码更改为:
outp.println("Hello :: enter QUIT to exit \n");
boolean more_data = true;
String line;
while (more_data) {
line = inp.readLine();
System.out.println("Message '" + line + "' echoed back to client.");// !!
if (line == null) {
System.out.println("line = null");
more_data = false;
} else {
outp.println("From server: " + line + ". \n");
if (line.trim().equals("QUIT"))
more_data = false;
}
}
newsock.close();
System.out.println("Disconnected from client number: " + n);
并按照Luis Miguel Serrano的建议在Hello消息末尾添加“\n”,并将客户端更改如下:
boolean more_data = true;
System.out.println("Established connection");
String line;// = inp.readLine();
while (more_data) {
line = inp.readLine();
System.out.println(line);
if (line == null) {
// nothing read
more_data = false;
} else
line = inp.readLine();
System.out.println(line);
String userInput = scanner.nextLine();
if (userInput.trim() == "QUIT") {
s.close();
System.out.println("Disconnected from server.");
more_data = false;
} else
outp.println(userInput);
}
System.out.println("end of while");
现在一切正常
如果有人能向我推荐一些Android客户端java服务器教程,我将不胜感激。按照您的评论顺序,这可能是一个严重的问题。尝试添加以下行:
outp.flush();
之后:
outp.println("Hello :: enter QUIT to exit");
当您写入流时,有时您写入的内容会保存在缓冲区中。如果要确保缓冲区已清空且字符串已实际发送,则需要调用flush()方法
更新
另外,请在服务器发送的Hello欢迎邮件的末尾添加“\n”。我认为这会使它起作用。按照你的评论顺序,这可能是一个令人兴奋的问题。尝试添加以下行:
outp.flush();
之后:
outp.println("Hello :: enter QUIT to exit");
当您写入流时,有时您写入的内容会保存在缓冲区中。如果要确保缓冲区已清空且字符串已实际发送,则需要调用flush()方法
更新
另外,请在服务器发送的Hello欢迎邮件的末尾添加“\n”。我想这会奏效的。你有什么行为?哪些错误(如有)?无错误,但消息顺序混乱。服务器应该发送“Hello::…”,然后客户端应该键入一条消息,以便服务器响应它。但它会等待客户端键入消息,然后发送“Hello::…”消息,您得到的是哪种行为?哪些错误(如有)?无错误,但消息顺序混乱。服务器应该发送“Hello::…”,然后客户端应该键入一条消息,以便服务器响应它。但它会等待客户端键入消息,然后发送“Hello::…”消息。它仍然在做同样的事情!无法理解为什么服务器的消息不会发送到客户端!-无论如何,谢谢您将“\n”添加到您好字符串的末尾。我打赌是这样。我突然想到:)谢谢你,路易斯。这有助于:)现在运行良好。它仍然在做同样的事情!无法理解为什么服务器的消息不会发送到客户端!-无论如何,谢谢您将“\n”添加到您好字符串的末尾。我打赌是这样。我突然想到:)谢谢你,路易斯。这有助于:)现在很好。