サーバーは、クライアントに「Hello :: enter QUIT」というメッセージを送信してから、クライアントが任意のテキストを入力し、クライアントのテキストに「From server:」を追加してエコーバックします。メッセージ。 しかし、秩序の中に混在しているようで、私はどこを見つけることができない!私はこの一日中終わりました!クライアントとサーバー間のTCP通信
これは、サーバーのコードです:私は、私はそうした後、それをテストしてい
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);
}
}
}
:
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);
}
}
}
およびクライアント・コードクライアントを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);
と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サーバチュートリアルを教えていただければ幸いです。
あなたはどのような行動をしていますか?どのエラー(もしあれば)? –
エラーはありませんが、メッセージの順序は混在しています。サーバーは "Hello :: ....."を送信する必要があります。次に、クライアントがメッセージを入力して、サーバーがエコーするようにします。しかし、クライアントがメッセージを入力するのを待ってから、それは "Hello :: ...."メッセージを送信します –