[질문] NIO 공부하다 머리털 다빠지겠네요.ㅜㅜ
강아지
이해도 잘 안가고..ㅜㅜ
특히 selector 와 SelectionKey 가 돌아가는 원리가 참...이해가 안되네요
그래서 책의 예제를 좀더 간추려서 .. 이해하기 쉽게 만들어 봤는데요
이놈이 안돌아가네요..
단순히 서버에서 클라이언트의 접속을 받아들이는건데요
java.net.ConnectException : Connection refused : connect
생략
이렇게 나오네요
분명히 책의 예제에서 서버가 클라이언트 접속처리 하는부분만 가져온거 같은데...
아래는 소스입니다.
서버
import java.nio.*;
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.nio.channels.spi.*;
import java.nio.charset.*;
import java.util.*;class SimpleChatServer extends Thread{
private ServerSocketChannel Server;
private Selector acceptSelector;
private static final int PORT = 30000;
public SimpleChatServer(){
try{
acceptSelector = Selector.open();
Server = ServerSocketChannel.open();
Server.configureBlocking(false);
InetSocketAddress address = new InetSocketAddress(192.168.1.3,PORT);
System.out.println(서버열림: + address);
Server.register(acceptSelector,SelectionKey.OP_ACCEPT);
}catch(Exception e){ e.printStackTrace();}
}
public void run(){
while(true){
try{
acceptSelector.select();
Set readyKeys = acceptSelector.selectedKeys();
for(Iterator i = readyKeys.iterator();i.hasNext();){
SelectionKey key = (SelectionKey)i.next();
i.remove();
ServerSocketChannel acceptChannel = (ServerSocketChannel)key.channel();
SocketChannel incomingChannel = acceptChannel.accept();
System.out.println(접속처리);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args){
SimpleChatServer sev = new SimpleChatServer();
sev.start();
}}
클라이언트import java.io.*;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
class SimpleChatClient extends Thread{
private ByteBuffer buffer;
private InetSocketAddress address;
private SocketChannel socketChannel;
private static final int PORT = 30000;
private static final String host =192.168.1.3;
public SimpleChatClient(){
try{
buffer = ByteBuffer.allocateDirect(2048);
address = new InetSocketAddress(InetAddress.getByName(host),PORT);
socketChannel = SocketChannel.open();
socketChannel.connect(address);
}catch(Exception e) { e.printStackTrace();}
}
public void run(){
int chars_read;
try{
while(socketChannel.isConnected()){
socketChannel.read(buffer);
buffer.flip();
System.out.println(buffer.toString());
buffer.clear();
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
SimpleChatClient client = new SimpleChatClient();
client.start();
}
}
-
천사의눈물
앗 이거 부담되서..
오늘부터 har~d 하게 공부모드 돌입해야겠네요.^^
ㅎㅎ 가고싶다님도 도움주시려(?--;) 하셨다니 감사합니다 -
황소자리
오히려 제가 부탁드려야지용.. NIO를 먼저시작하신 선배님이신데..^^ 책도착하는날과 함께 질문공세 나갈지도 모르겠네여.. 덧글피하시면. 미오할꺼에여......
-
두루
ㅋㅋ 처리 하셨구나. 지금 저두 해보고 있었는데.. 오늘은 널널 해서. 이것저것 해보는군요.
-
에드가
아..해결했습니다...서버소캣채널을 바인딩을 안시켜 줬네요..-_-; 이런.바보!
둥수다님 잘 부탁 드리겠습니다.^_^ -
유진공주
음.. 저두 NIO로 함 해볼라고.. 지금 인터넷에서 NIO관련책 하나 주문했네여... 지금은 스윙좀 보면서.. UI구상하고 있꼬.. 저도 조만간 NIO로 메신져 함 만들어볼께여..^^ 아마 그때되면.. 같이 고민할듯..ㅎㅎ 힘내세여..