私は、Javaアプリケーションの開発の初心者です。私はアンドロイドでチャットアプリケーションを作っています。私は入ってくるクライアントにサービスを提供するためにスレッドを使用しますが、クライアントがサーバに接続しているときはソケットに含まれるデータを取得できませんが、クライアント接続が失われたときにデータが表示されます。 ReadLineメソッドを使用して、ソケットからデータを読み取ります。 これは、サーバ側のプログラムコードです:プログラムの起動時にサーバー側の表示の下にソケットからデータを取得できません
package server;
import java.net.*;
import java.io.*;
import java.util.Vector;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class Server {
public static void main(String[] args)throws IOException, InstantiationException,
IllegalAccessException {
ServerSocket servsocket = null;
Socket sock = null;
byte[] bytebuffer = new byte[512];
try {
System.out.println("SERVER IS RUNNING...");
servsocket = new ServerSocket(28000);
while(true){
sock = servsocket.accept();
System.out.println(servsocket.isBound());
System.out.println("Port "+servsocket+" Ready!!!");
System.out.println("Accept connection requests from " + sock);
System.out.println("From CLIENT "+sock.getInetAddress()+ " and PORT " +
sock.getPort());
ChatThread thread = new ChatThread(sock);
System.out.println("Thread is running");
thread.run();
}
} catch (IOException ioe) {
System.out.println(ioe);
}
finally{
try {
servsocket.close();
} catch (IOException ioe) {
System.out.println(ioe);
}
}
}
}
class ChatThread extends Thread{
static Vector<ChatThread> chatthread = new Vector<ChatThread>(10);
private Socket sock;
private BufferedReader in ;
private PrintWriter out;
public ChatThread (Socket socket) throws IOException {
this.sock = socket;
in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(
new OutputStreamWriter(socket.getOutputStream()));
byte[] bytebuffer = new byte[512];
int receivemssg;
}
public void run(){
int recvMsgSize;
byte[] bytebuffer = new byte[512];
String readsocket;
try {
readsocket = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
}
。私はクライアント側から "こんにちは...."という言葉を送ろうとしました。スレッドが実行されていないことがわかります。
サーバが実行中... true ポートServerSocket [addr = 0.0.0.0/0.0.0.0、port = 0、localport = 28000] Ready !!! 受け入れる接続がfromSocketを要求[ADDR =/172.17.231.254、ポート= 3567、次に、localport = 28000]クライアントから /172.17.231.254とPORT 3567 スレッドが実行される...
私は上のReadLineメソッドを置き換える
getInputStreamを持つスレッド。クライアントからスレッドを実行すると、メッセージを表示できます。これは前に使用したreadlineメソッドを置き換えるスレッドに入るコードです。次のようにpublic ChatThread (Socket socket) throws IOException {
this.sock = socket;
in = sock.getInputStream();
out = sock.getOutputStream();
byte[] bytebuffer = new byte[512];
int receivemssg;
}
public void run(){
int recvMsgSize;
byte[] bytebuffer = new byte[512];
System.out.println("Thread is Running...");
String masuk = new String(bytebuffer);
System.out.println(bytebuffer);
System.out.println(in.toString());
System.out.println("thread successfully executed !!!");
synchronized (chatthread) {
chatthread.addElement(this);
}
try {
while ((recvMsgSize = in.read(bytebuffer)) != -1) {
out.write(bytebuffer, 0, recvMsgSize);
System.out.println("The length of a character is received and returned "+bytebuffer.length);
}
} catch (IOException e) {
System.out.println(e);
}
}
}
が、次の問題は、私が表示され、文字列/テキストでソケットの内容を持ち出すことができないでは、次のとおりです。
ポートのServerSocket [ADDR = 0.0.0.0/0.0.0.0、ポート= 0、ローカルポート= 28000] Siap !!! @ 7c6768 java.net.SocketInputStream @ B [ ...接続がfromSocket [ADDR =/172.17.231.254、ポート= 3577、次に、localport = 28000] は、スレッドが実行される3577 CLIENT /172.17.231.254とPORTからの要求受け入れ1690726 スレッドが正常に実行されました! 文字の長さは、受信し
512は私を助けてください返され、感謝:) GBUみんな...
返信いただき、ありがとうございます:) –