말라
109
2017-11-13 19:34:44 작성 2017-11-14 10:52:39 수정됨
5
4231

java socket 접속 유지 방법 - socket server 연결 후 client에서 실행하면 연결 끊김


안녕하세요.

자바 socket을 공부하고 있습니다.

socket을 서버에 연결 후

client에서의 소스를 실행하면 연결이 끊어집니다.

예제를 많이 찾아보았는데 연결을 유지해주는 부분이 어딘지 몰라서

질문을 남깁니다.




import java.io.*;
import java.net.*;

public class Client {
	Socket socket = null;
	Client(){
		
		try {
			Socket socket = new Socket("localhost",9002);
			this.socket = socket;
			
			//ready for send to Server
			BufferedWriter bw = new BufferedWriter(
					new OutputStreamWriter(socket.getOutputStream()));
				
			bw.write("Hello Server, I'm Clients motherFucker");
			bw.newLine(); 
			bw.flush();
				
			//ready for receive from Server
			
			BufferedReader br = new BufferedReader(
					new InputStreamReader(socket.getInputStream()));
			ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
			String serverMsg = br.readLine();
			
			
			System.out.println("receive from Server : "+ serverMsg);
			Thread qwer = new Thread(new Tread1(socket));
			qwer.start();
			socket.close();
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		new Client();
	}
	class Tread1 extends Thread{
		Socket socket  = null;
		Tread1(Socket socket) {
			this.socket = socket;
		}
		public void run() {
			System.out.println("Thread start");
		}
	}

}


0
0
  • 답변 5

  • 임도형
    78
    2017-11-13 21:01:15

    쓰레드 생성과 시작 직후 socker을 닫고 있네요.

    			Thread qwer = new Thread(new Tread1(socket));
    			qwer.start();
    			socket.close();

    연결이 끊어지는게 당연합니다.


    socket.colose()를 호출하지 않았다 하더라도

    그리고 Thread1의 run( )도 print 직후 메소드가 종료되고, Thread1 쓰레드와 main 쓰레드 모두 종료되겠네요.


    일반적으로 Thread 코드는 다음과 같은 모양을 합니다.


    public void run() {

        while(true) {

            // do something

        }

    }


    run( ) 메소드내에서 종료되지 않고, socket에 쓰거나, 혹은 읽거나.


    2
  • 말라
    109
    2017-11-13 21:25:17
    임도형// 감사합니다. 참고해서 코드 작성해보겠습니다 ^_^
    0
  • 말라
    109
    2017-11-13 21:28:38

    임도형// 혹시  do something 부분에 socket을 유지만 하기위한 것은 어떤것을 주로 하나요?ㅠㅠ

    0
  • 꾸아앙
    1k
    2017-11-14 10:45:00

    작성자분이 답변하신분의 글을 제대로 이해를 못하신것 같네요

    socket 연결이 종료되는 경우는 첫답변하신분의 글을 다시 확인하시면 됩니다

    loop부분에 뭘 해야할지는 구현하시는 기능에따라 넣어주셔야 하는거구요

    0
  • 말라
    109
    2017-11-15 19:49:26

    꾸아앙// 아,,  제가 잘못이해를 했습니다..제가 thread를 제대로 이해하지 못하고 있었습니다. 그냥 무조건 while을 사용하지 않아도 무한 루프인줄 이해하고 있었습니다. 감사합니다!!


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.