[server]
package basic;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.sql.Date;
public class TimeServer {
// flip, buffer, Socket, hasRemaining, 활용
public static void main(String[] args) {
System.out.println("TimeServer Start!!!");
try {
ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.socket().bind(new InetSocketAddress(5000));
//channel을 열고
//소켓을 bind
while (true) {
System.out.println("Wainting for request.....");
SocketChannel socketChannel = serverChannel.accept();
//소켓채널 accept
if (socketChannel != null) {
String date = "Date : " + new Date(System.currentTimeMillis());
//소켓채널이 낫널이면 즉, 채널이 열려있으면 date에 date를 집어넣음
ByteBuffer buffer = ByteBuffer.allocate(64);
//buffer를 64byte로 allocate 하고
buffer.put(date.getBytes());
//buffer에 date변수의 데이터크기만큼 buffer를 생성
buffer.flip();
//buffer를 flip() 한다.
//여기서 flip은, 64바이트로 allocate해서 buffer를 잡았으나, 실제로 buffer에 들어간 데이터의 크기만큼 buffer의 크기를 조정
while (buffer.hasRemaining()) {
socketChannel.write(buffer);
//buffer에 데이터가 남아있는 동안 소켓채널을 통해 데이터를 전송
}
System.out.println("[Server] : " + date + " - 전송");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
[client]
package basic;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class TimeClient {
public static void main(String[] args) {
SocketAddress address = new InetSocketAddress("127.0.0.1", 5000);
try {
SocketChannel socketChannel = SocketChannel.open(address);
ByteBuffer buffer = ByteBuffer.allocate(64);
int byteRead = socketChannel.read(buffer);
//buffer를 64byte로 allocate 함
//byteRead에 소켓채널을 통해 buffer로 데이터를 받아옴
while (byteRead > 0) {
//만약 소켓채널을 통해 buffer에 데이터를 받아왔으면
buffer.flip();
//64로 정의한 buffer의 크기를 실제 데이터의 크기로 flip() 함
while (buffer.hasRemaining()) {
//buffer에 데이터가 남아잇는 동안
System.out.print((char) buffer.get());
//데이터를 출력하라.
}
System.out.println();
byteRead = socketChannel.read(buffer);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'Programing > JAVA' 카테고리의 다른 글
객체지향 프로그래밍 (0) | 2017.11.12 |
---|---|
소켓채널 등을 이용한 채팅프로그램 (0) | 2017.11.03 |
채팅프로그램 리시버Receiver (0) | 2017.11.03 |
채팅프로그램 ConnectionManager (0) | 2017.11.03 |
알아두면 유용한 Eclipse 단축키 (0) | 2017.10.31 |