소켓 만들어 실행 해보기 2

소켓 만들어 실행 해보기 2

작성일 2023.08.02댓글 1건
    게시물 수정 , 삭제는 로그인 필요

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)


 위 의문 사항들에 대해 알려 주시면 감사하겠습니다. *^^*





profile_image 익명 작성일 -

서버측 코드에서 while 루프 부분을 아래와 같이 클라이언트 측 while루프와 대응이 되도록 고치시면 되겠습니다.

in = new BufferedReader(new InputStreamReader(client.getInputStream())); //기존 출력 스트림에서 새 PrintWriter를 만듭니다. out = new PrintWriter(client.getOutputStream(), true); while(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); }

소켓 만들어 실행 해보기 2

... 스트림을 만들어 //stdin에 저장 stdin = new... Send: java test 2 의문 4: 그래서 콘솔창에 나타난 빨간 버튼을 클릭하여 실행을 중지...

리눅스에서 소켓 통신 실패...

... 파일로 만들어 리눅스 서버에... jar를 실행 시켜 놓으면 소켓 접속이... // 2. 소켓을 호스트의 포트와 binding String localHostAddress...

TCP 소켓 통신에 대한 질문? (기본...

... 프로그램을 만들어 봤는데 (사실 인터넷 이곳... 네트웍계층 :OSI의 2,1에 해당함 굳이 OSI 7계층과 연관성을 짓자면 옆에 설명 놓은거 보이시죠? 그냥...

매매잔금대출 실행되는 절차

... 1개월 만들어놓은상태라 소득증빙이 참 난감하여 추후... 없습니다~ 2. 다른분께 상담받으신대로 매매잔금대출은 소득보다는 신용을 중요하게 보기때문에 소득이 낮으셔도...

소켓을 이용한 글쓰기

... 소스보기로 볼 수 있는 html 가 따라옵니다.... 소켓으로 작업할 경우 위에서처럼 각 통신에 맞는 헤더들을 만들어 통신규약을 일일이 맞춰주어야 하는...

AMD듀얼코어와 AM2소켓 메인보드와 RAM!!

... 뜯어 보기도 하고.. 만지작 거리기도 많이 해보긴... 2.제가 현재 1기가 DDR2 PC2-4300(266MHz) + 1기가 DDR2 PC2-5300... 인텔과 달리 소켓만 맞으면 인식할수 있게 만들어냅...

사주보기.

... 이것저것을 만들어 보려다가 결국은 손해만 보고 일을... 실행을 삼가십시오. ▲ 이 달의 1일부터 10일까지는... 질문내용의 정보로만 보기에는 조금 부족했네요. 이루고자...

강남구 조계종 절 추천 (40대)

... 또한 새벽예불에 참석하면, 서울에서 보기드문, 별자리를 볼 수 있다(관악산 연주암 연주대의 응진전은 영험한 나한 기도처이며, 응진전 옆, 바위에 새겨진...