본문 바로가기

JAVA/기초 프로그래밍

TCP// 쓰레드 문자열 전송 기본

*thread.sleep은 컴퓨터처리 속도가 너무 빨라 조절할 때(각각의 메서드는 1초이하의 시간이 걸림)

  ex ) thread.sleep((int)(Math.random()*1000)); +예외처리

 

*thread를 동작시킬 때에는  run()이아닌 start()를 호출해야한다 (단, thread를 상속 받았을 경우에만/ 아니면 thread객체를 만들어 - Thread thr = new Thread()

 

-start()는 실행될 준비를 하게하는 메서드-----> 실행준비가 다 되면 run()호출

t1.start();를 입력하면 메인 + run() 으로 2개, 이후 추가시 run() +1씩

 

쓰레드 동기화, 동기화 블럭

synchronized를 메서드에 붙일 경우

- 모니터링 Rock은 한 for문이 끝날때 까지 다음 메서드들은 대기중이 된다(병용 가능)

synchronized(this){ sysout } 일경우

- sysout 만 블럭이 되어 겹치지않게 출력된다

 

Server

public class mainClass {
	public static void main(String[] args) {

		Socket clientsocket = null;//클라이언트 소켓
		
		try {
			//ServerSocket = 문지기 소켓 = 서버용 소켓
			/*IPNumber 192.168.7.40  : 자동 */
			ServerSocket serSocket = new ServerSocket(9000/*PortNumber 입력*/);
			// IP, Port 설정
			// binding(적용)
			// listen
			
			//client를 기다림
			System.out.println("접속 대기중...");
			clientsocket = serSocket.accept();//accept는 connect와 붙는다
			//접속 대기중...
			
			System.out.println("client IP : " + clientsocket.getInetAddress()
								+ " Port : " + clientsocket.getPort());
			//client IP : /192.168.7.40 Port : 52231
			
			//recv (받는다)
			BufferedReader reader 
				= new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
			String packetStr = reader.readLine();//데이터 받아오기
			
			System.out.println("클라이언트로부터 패킷 : "+ packetStr);
			
			//send (보내다)
			
			
			//숙제
			
			
			clientsocket.close();
			serSocket.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Client

package main;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;

public class mainClass {

	public static void main(String[] args) {
		
		/*
		 	1. 접속해야 할 Server IP(주소)를 설정
		 	2. Socket을 생성
		 	3. 접속 --- connect
		 	
		 	4. packet을 전송
		 	
		 */
		
		InetSocketAddress sockAddr = new InetSocketAddress("192.168.7.40", 9000);
														//123.0.0.1 <- 자기 자신을 접속하는 IP번호
		Socket socket = new Socket();
		
		try {
			socket.connect(sockAddr, 10000 /*1000은 1초, 10000은 10초*/ );
			
			InetAddress inetAddr;//접속 확인용
			if ((inetAddr = socket.getInetAddress()) != null) {
				System.out.println("Server connect success! : "+inetAddr);
				//Server connect success! : /192.168.7.40
				
			}else {
				System.out.println("Server connect fail~");
			}
			
			String packetStr = "안녕하세유";
			//send (보내다)
			PrintWriter writer = new PrintWriter(socket.getOutputStream());
			writer.println(packetStr);
			writer.flush();//어디까지인지 끊어줌
			
			//recv (받는다)
			
			//숙제
			
			
			socket.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}