소켓 만들어 실행 해보기 2
-
게시물 수정 , 삭제는 로그인 필요
package ch19Network.sec01Socket;
import java.io.*;
import java.net.*;
public class SocketServer {
public static void main(String[] args) {
ServerSocket server;
Socket client;
BufferedReader in;
PrintWriter out;
try {
server = new ServerSocket(9040);//9040포터로 서버소켓 생성
//서버 소켓에 들어온 연결 요청 수락
//연결이 이루어 질때까지 기다리므로 클라이언트가 실행되어 연결을 시도하지 않으면
//무한정 대기 상태가 유지 된다.
client = server.accept();
//서버의 입력스트림은 클라이언트의 출력스트림에 연결된고,
//반대로 클라이언트의 입력 스트림은 서버의 출력 스트림에서 연결되어 있다.
//따라서 클라이언트에서 입력한 내용이 서버로 전달 되면,
// 그 내용이 클라이언트로 전달되도록 되어 있다. 이때 서버에서 되돌려 주는 내용에는
//서버 알림 문자열을 붙여 구분할 수 있도록 했다.
while(true) {
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//기존 출력 스트림에서 새 PrintWriter를 만듭니다.
out = new PrintWriter(client.getOutputStream(), true);
String inLine = in.readLine();
if(inLine == null) {
break;
}
System.out.println("Recv: "+inLine);
inLine += "by server";
//선 구분자 문자열을 작성하여 현재 선을 종료합니다.
out.println(inLine);
System.out.println("send: "+inLine);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
____________________________________________
package ch19Network.sec01Socket;
import java.io.*;
import java.net.*;
public class SocketClient {
public static void main(String[] args) {
Socket socket;
BufferedReader in;
BufferedReader stdin;
PrintWriter out;
String inLine = null;
String host = "localhost";
//자기자신을 뜻하는 localhost로 지정 스펠링이 틀리면 오류 남
try {
//스트림 소켓을 생성하여 명명된 호스트의 지정된 포트 번호에 연결합니다.
socket = new Socket(host, 9040);
//기존 출력 스트림에서 새 PrintWriter를 만듭니다.
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//시스템의 입력장치로 입력받는 것을
//기본 크기의 입력 버퍼를 사용하는 버퍼 문자 입력 스트림을 만들어
//stdin에 저장
stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Send: ");
while((inLine=stdin.readLine()) != null) {
out.println(inLine);
System.out.println("Recv:"+in.read());
System.out.println("send: ");
}
in.close();
out.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
----------------------------------------------
SocketServer클래스를 처음 실행 시켜 놓고 SocketClient클래스를 실행시켜 java test socket를 키보드로 입력후엔터키를 치면 아래와 같이 콘솔 창에 출력 됩니다.
의문 1 : 아래에 Recv: 에 java test socket이 출력되어야 하는데 왜 안되는지 ? 106 이 무엇을 의미하는지 잘 모르겠습니다.
Send:
java test socket
Recv:106
send:
그리고 엔터키를 한번 더 터치하면 아래와 같이 콘솔 창에 출력 됩니다. 이것은 SocketServer클래스에서 실행된 결과를 보여 주는 것 같은데 습니다.
의문2: SocketClient 클래스에서 어느 명령을 수행할때SocketServer클래스의 server.accept()명령이 수행 되는지 궁금 합니다.
Recv: java test socket
send: java test socketby server
Recv:
send: by server
의문3 : SocketClient클래스를 두번째로 실행 시켜 java test 2를 입력후 엔터키를 많이 입력하여도 아래와 같이 아무런 반응이 없습니다. 왜그런지 궁금합니다.
Send:
java test 2
의문 4: 그래서 콘솔창에 나타난 빨간 버튼을 클릭하여 실행을 중지 시키고 다시 SocketServer클래스를 실시키면 아래와 같이 오류가 납니다. 왜그런지궁금합니다.
java.net.BindException: Address already in use: bind
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:555)
at java.base/sun.nio.ch.Net.bind(Net.java:544)
at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:643)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:388)
at java.base/java.net.ServerSocket.<init>(ServerSocket.java:274)
at java.base/java.net.ServerSocket.<init>(ServerSocket.java:167)
at EasyJavaProgramming/ch19Network.sec01Socket.SocketServer.main(SocketServer.java:15)
위 의문 사항들에 대해 알려 주시면 감사하겠습니다. *^^*
package ch19Network.sec01Socket;
import java.io.*;
import java.net.*;
public class SocketServer {
public static void main(String[] args) {
ServerSocket server;
Socket client;
BufferedReader in;
PrintWriter out;
try {
server = new ServerSocket(9040);//9040포터로 서버소켓 생성
//서버 소켓에 들어온 연결 요청 수락
//연결이 이루어 질때까지 기다리므로 클라이언트가 실행되어 연결을 시도하지 않으면
//무한정 대기 상태가 유지 된다.
client = server.accept();
//서버의 입력스트림은 클라이언트의 출력스트림에 연결된고,
//반대로 클라이언트의 입력 스트림은 서버의 출력 스트림에서 연결되어 있다.
//따라서 클라이언트에서 입력한 내용이 서버로 전달 되면,
// 그 내용이 클라이언트로 전달되도록 되어 있다. 이때 서버에서 되돌려 주는 내용에는
//서버 알림 문자열을 붙여 구분할 수 있도록 했다.
while(true) {
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//기존 출력 스트림에서 새 PrintWriter를 만듭니다.
out = new PrintWriter(client.getOutputStream(), true);
String inLine = in.readLine();
if(inLine == null) {
break;
}
System.out.println("Recv: "+inLine);
inLine += "by server";
//선 구분자 문자열을 작성하여 현재 선을 종료합니다.
out.println(inLine);
System.out.println("send: "+inLine);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
____________________________________________
package ch19Network.sec01Socket;
import java.io.*;
import java.net.*;
public class SocketClient {
public static void main(String[] args) {
Socket socket;
BufferedReader in;
BufferedReader stdin;
PrintWriter out;
String inLine = null;
String host = "localhost";
//자기자신을 뜻하는 localhost로 지정 스펠링이 틀리면 오류 남
try {
//스트림 소켓을 생성하여 명명된 호스트의 지정된 포트 번호에 연결합니다.
socket = new Socket(host, 9040);
//기존 출력 스트림에서 새 PrintWriter를 만듭니다.
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//시스템의 입력장치로 입력받는 것을
//기본 크기의 입력 버퍼를 사용하는 버퍼 문자 입력 스트림을 만들어
//stdin에 저장
stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Send: ");
while((inLine=stdin.readLine()) != null) {
out.println(inLine);
System.out.println("Recv:"+in.read());
System.out.println("send: ");
}
in.close();
out.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
SocketServer클래스를 처음 실행 시켜 놓고 SocketClient클래스를 실행시켜 java test socket를 키보드로 입력후엔터키를 치면 아래와 같이 콘솔 창에 출력 됩니다.
의문 1 : 아래에 Recv: 에 java test socket이 출력되어야 하는데 왜 안되는지 ? 106 이 무엇을 의미하는지 잘 모르겠습니다.
Send:
java test socket
Recv:106
send:
그리고 엔터키를 한번 더 터치하면 아래와 같이 콘솔 창에 출력 됩니다. 이것은 SocketServer클래스에서 실행된 결과를 보여 주는 것 같은데 습니다.
의문2: SocketClient 클래스에서 어느 명령을 수행할때SocketServer클래스의 server.accept()명령이 수행 되는지 궁금 합니다.
Recv: java test socket
send: java test socketby server
Recv:
send: by server
의문3 : SocketClient클래스를 두번째로 실행 시켜 java test 2를 입력후 엔터키를 많이 입력하여도 아래와 같이 아무런 반응이 없습니다. 왜그런지 궁금합니다.
Send:
java test 2
의문 4: 그래서 콘솔창에 나타난 빨간 버튼을 클릭하여 실행을 중지 시키고 다시 SocketServer클래스를 실시키면 아래와 같이 오류가 납니다. 왜그런지궁금합니다.
java.net.BindException: Address already in use: bind
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:555)
at java.base/sun.nio.ch.Net.bind(Net.java:544)
at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:643)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:388)
at java.base/java.net.ServerSocket.<init>(ServerSocket.java:274)
at java.base/java.net.ServerSocket.<init>(ServerSocket.java:167)
at EasyJavaProgramming/ch19Network.sec01Socket.SocketServer.main(SocketServer.java:15)
위 의문 사항들에 대해 알려 주시면 감사하겠습니다. *^^*