424
408
2020-02-03 09:13:29
3
213

자바 TCP/IP 클라이언트부분 질문드립니다.


안녕하세요 TCP/IP 멀티쓰레드 부분 구현중인데요, 다름이 아니라 제가 하고싶은건 

TCP/IP가 오픈 되었을때 쓰레드가 생성되고, 메시지 송수신할때는 오픈되었던 쓰레드 네임으로 메시지를 주고받게 하고싶은데 문제는 오픈 되었을때랑 송수신할때 쓰레드 NAME값이 달라가지고요(증가가됩니다..)

어떻게 하면 좋을까요? 고수님들 알려주세요 ㅠㅠ!


public class TcpIpClient2 {

Socket sock = null; // Server와 통신하기 위한 Socket

BufferedReader in2 = null; // 키보드로부터 읽어들이기 위한 입력스트림

DataOutputStream out = null;

DataInputStream in = null; // Server로부터 데이터를 읽어들이기 위한 입력스트림

BufferedReader br = null;

String thName = null;

Thread th = null;


public void tcp_open() { // TCP/IP 오픈

try {

sock = new Socket("127.0.0.1", 12000); // 서버로 접속

th = new Thread();

System.out.println("쓰래드생성 " + th.getName());


} catch (IOException e) {

System.out.print("IOException\n");

}

}


public String tcp_message(InputStream msg) { // TCP/IP 메시지 송수신

try {

FormatString fs = new FormatString();

in = new DataInputStream(sock.getInputStream());

in2 = new BufferedReader(new InputStreamReader(msg));

out = new DataOutputStream(sock.getOutputStream());

br = new BufferedReader(new InputStreamReader(sock.getInputStream()));


String data = in2.readLine();


// 서버로 문자열 전송

out.writeUTF(fs.FormatStringnull(data, 1234));


th = new Send10(out, in2);

th.start();

} catch (IOException e) {

System.out.print("IOException\n");

}


try { // 클라이언트의 메인 쓰레드는 서버로부터 데이터 읽어들이는 것만 반복.

while (true) {

String str2 = in.readUTF();

System.out.println("서버로부터 응답 -> " + str2);

}

} catch (IOException e) {

}


return thName;

}

}


class Send10 extends Thread {

FormatString fs = new FormatString();

DataOutputStream out;


BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));


public Send10(DataOutputStream out, BufferedReader in2) {

// System.out.println(getName() + " 스레드가 생성되었습니다.");

// this.in2 = in2;

this.out = out;

}


public void run() {

while (true) {

try {

String msg = in2.readLine(); // 키보드로부터 입력을 받음

out.writeUTF(fs.FormatStringnull(msg, 1234)); // 서버로 전송

} catch (Exception e) {

}

}

}

}

0
0
  • 답변 3

  • 엡실론
    1k
    2020-02-03 09:24:48

    tcp_open 에서도 쓰레드를 생성하고 tcp_message 에서도 새로 생성하니 달라지는 거겠죠.

    무얼 하고 싶으신건지 잘 모르겠네요.

    0
  • 424
    408
    2020-02-03 09:43:35

    아 그러면 tcp_open에서만 생성하는데 초기값(네임값.getName)이 왜 thread-3부터 시작할까여..?

    0
  • 엡실론
    1k
    2020-02-03 10:12:04

    글쎄요. 전체 코드가 없으면 알기 힘들죠.

    아직 스레드에 익숙치 않으시면 우선 싱글 스레드를 구현하고 나중에 스레드를 추가해보시는 건 어떨까요?

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