1
다음 코드 조각이 있으며 동작 방법을 완전히 이해하지 못했습니다.소켓을 통해 여러 객체 보내기
클라이언트
public class Client {
public static void main(String[] args) throws InterruptedException {
try {
final Socket socket = new Socket("localhost", 3011);
final OutputStream socketStream = socket.getOutputStream();
for (int i = 0; i < 10; i++) {
final byte[] message = new byte[1 * 1000 * 1000];
socketStream.write(message);
socketStream.flush();
System.out.println("sent message");
}
socketStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
서버 :
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException {
final int portNumber = 3011;
try {
ServerSocket serverSocket = new ServerSocket(portNumber);
System.out.println("server running on " + portNumber);
while (true) {
final Socket clientSocket = serverSocket.accept();
final InputStream inputStream = clientSocket.getInputStream();
final byte[] in = new byte[1024];
long start = System.currentTimeMillis();
int totalBytesRead = 0;
int bytesRead;
while((bytesRead = inputStream.read(in)) >= 0) {
totalBytesRead += bytesRead;
}
long duration = System.currentTimeMillis() - start;
System.out.println("got " + totalBytesRead + " bytes from socket");
System.out.println("took " + duration + "ms");
final double transferRatePerSecond = totalBytesRead/(duration/1000f);
System.out.println("average transfer was " + transferRatePerSecond + " bytes/second");
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
지금 제가 뵙기를 희망하는 10 개별 메시지는 서버 측에서 수신합니다. 내가 실제로 얻는 것은 클라이언트가 보낸 모든 10 개의 메시지의 총인 것처럼 보이는 하나의 메시지입니다. 예를 들어 :
got socket Socket[addr=/5.67.133.157,port=53432,localport=3011]
got 10000000 bytes from socket
took 69332ms
average transfer was 144233.546875 bytes/second
왜 10 개의 메시지를 가져야한다고 생각하는지 설명 할 수 있습니까? 큰 1Mb의 빈 바이트 버퍼를 만들고 그냥 보내는 중입니다. – ControlAltDel
예 - 스트림 사이에 스트림을 플러시하고 10 번 보내고 있습니다. – imrichardcole
왜 소켓을 사용해야합니까? WCF는이 모든 저급 수준의 자료를 처리 할 프레임 워크입니다. –