Java Tcp Socket InputStream readについて-1
4465 ワード
問題
サービスエンドSocket、accept()は一つのsocketの対象になったら、
解決
クライアントSocketでは、
クライアントコード
サービスエンドSocket、accept()は一つのsocketの対象になったら、
InputStream sis
オブジェクトを取り出して、sis.read()
はずっと-1まで取れませんでした。解決
クライアントSocketでは、
OutputStream sos = socket.getOutputStream();
がSOSオブジェクトに対して動作完了後、すなわちデータの書き込みが完了し、flush()後、サービス端末に対してデータの転送が完了したとsocket.shutdownOutput();
を呼び出す必要があります。以上の問題を解決します。クライアントコード
import java.io.OutputStream;
import java.net.Socket;
public class TcpSocketClient {
public static void main(String[] args){
Thread t = new Thread(){
public void run() {
try {
Socket socket = new Socket("127.0.0.1", 47708);
OutputStream sos = socket.getOutputStream();
for (int i = 0; i < 100; i++) {
Thread.sleep(500);
sos.write((byte)i);
int result = 1;
result *= i;
}
sos.flush();
// , socket.getInputStream().read() -1.
socket.shutdownOutput();
socket.close();
System.out.println("client socket finish!");
} catch (Exception e) {
System.out.println(e);
}
};
};
t.start();
}
}
サービスコードimport java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;
public class TcpSocketServer {
public static void main(String[] args) {
try {
System.out.println("TcpSocketServer start!");
ServerSocket serverSocket = new ServerSocket(47708);
while (true) {
System.out.println("TcpSocketServer waiting accept!");
Socket socket = serverSocket.accept();
System.out.println("TcpSocketServer accept and dealing!");
InputStream sis = socket.getInputStream();
int size = sis.available();
byte[] data = new byte[512];
int k = -1;
while((k = sis.read(data)) != -1) {
System.out.println(" k = " + k + " size = " + size + " Collect form Client data = " + Arrays.toString(Arrays.copyOf(data, k)));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}