본문 바로가기

JAVA

[JAVA] 5자리 2진수의 보수 구하기 0또는 1로 입력되는 다섯 개의 숫자를 배열에 입력받아 1의 보수와 2의 보수를 구하는 문제. 실행 결과 package jungbo; import java.util.InputMismatchException;import java.util.Scanner; public class P90Complement {public static void main(String[] args) {int bin[] = new int[5];//처음 입력받은 이진수를 저장할 배열int bo1[] = new int[5];//1의 보수를 저장할 배열int bo2[] = new int[5];//2의 보수를 저장할 배열int i; //배열의 자리수int C=1; //자리올림수(carry)//2의 보수를 구할때 첫 자리올림수는 1이어야한다./.. 더보기
[JAVA] 최대공약수, 최소공배수 계산 문제 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 유클리드 호제법으로 계산하여 출력해 보자. ※유클리드 호제법(互除法) 호제법이란 두 수가 서로 상대 수를 나누어서 원하는 수를 얻는 방법을 말한다. 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면 a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라 b를 r로 나눈 나머지 r'를 구하고 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다. 실행 결과 package jungbo; import java.util.InputMismatchException;import java.util.Scanner; public class P124DivisorDenomina.. 더보기
[JAVA] 약수(Divisor) 관련 문제 어떤 정수의 모든 약수 중 자신을 제외한 약수를 모두 합하면 자신과 같아지는 수가 있다. 예를 들어 6의 약수 1,2,3,6 중 6을 제외한 1, 2, 3 을 더하면 6이 되어 자신과 같아 진다. 4~1000까지 이러한 수를 찾아 출력하고, 그 개수를 출력하는 알고리즘을 만들어보자. 실행 결과 package jungbo; public class P109Divisor {public static void main(String[] args) {int LM = 0; //조건을 만족하는 수를 찾으면 횟수를 센다.int N; //4부터 1000까지 조건을 만족하는지 확인할 숫자int sum; //약수들의 합을 저장할 변수int K,J,R; //K : N의 가장 큰 약수를 저장할 변수. J : 약수인지 판별할 변수 .. 더보기
[JAVA] 서버 소켓 서버는 클라이언트를 구현할때 사용하는 소켓만으로는 구현할 수 없다. 클라이언트는 서버와 대화를 할 때를 제외하고는 소켓을 사용하지 않는다는 점도 있고, Socket 객체를 생성하기 위해서는 접속하고자 하는 인터넷 호스트에 대해서 알아야만 한다. 서버를 작성할 때에는 누가 서버에 접속할지, 언제 접속할지는 신경쓰지 않아도 된다. 클라이언트의 연결 요청을 수용하는 서버 프로그램을 위해, 자바는 서버 소켓을 나타내는 ServerSocket 클래스를 제공한다. 서버 소켓은 연결을 기다리며, 연결을 설정한 후 부터는 서버는 반환된 보통의 Socket 객체를 사용하여 클라이언트에게 데이터를 전송한다. 데이터는 항상 반환된 이 보통의 소켓을 통해 보내진다. ServerSocket을 사용하기 전에... ServerSo.. 더보기
[JAVA] 소켓 옵션 설정하기(Client) 소켓 옵션은 자바 Socket 클래스 내부의 네이티브 소켓이 데이터를 보내거나 받는 방법을 지정한다. 자바 클라이언트 소켓에 대한 9가지 옵션 ▶ TCP_NODELAY▶ SO_BINDADDR▶ SO_TIMEOUT▶ SO_LINGER▶ SO_SNDBUF▶ SO_RCVBUF▶ SO_KEEPALIVE▶ OOBINLINE▶ IP_TOS TCP_NODELAY public void setTcpNoDelay(boolean on) throws SocketException public boolean getTcpNoDelay() throws SocketException TCP_NODELAY의 설정을 true로 하면 패킷의 크기에 상관없이 가능한 한 빨리 패킷을 전송한다. 일반적으로 작은 패킷은 전송하기 전에 큰 패킷 하나.. 더보기
[JAVA] 종료된 소켓과 연결된 소켓(Client) isClosed() 메소드는 소켓이 닫혀있는 경우 true, 아닌 경우 false를 반환한다. 소켓의 상태가 불확실한 경우 IOException이 발생할 위험을 감수하는 것 보다 이 메소드를 사용하는 것이 좋다. if(socket.inClosed() {//소켓이 닫혀 있는 경우 처리...} else {//소켓이 열려 있는 경우 처리...} 그러나 이 방법도 완벽하지는 않다. 만약 소켓이 최초에 연결된 적이 없는 경우 소켓은 확실히 열려 있지는 않지만 isClosed()메소드는 false를 반환한다. Socket 클래스는 isConnected() 메소드도 제공한다. 메소드의 이름만 보고는 소켓이 현재 연결되어 있는지 알려주는 것 같지만, 이 메소드는 소켓이 원격 호스트에 연결된 적이 있는지 여부를 알려준다.. 더보기
[JAVA] 소켓 정보 얻기(Client) 소켓 객체는 get 메소드를 사용하여 접근할 수 있는 몇 가지 속성을 제공한다. ◎ 원격 주소 ◎ 원격 포트◎ 로컬 주소◎ 로컬 포트 이 속성에 접근하기 위한 get메소드는 public InetAddress getInetAddress()public int getPort()public InetAddress getLocalAddress()public intgetLocalPort() set 메소드는 존재하지 않는다. 이 속성들은 소켓이 연결되자마자 설정되며 고정되어 있다. getInetAddress() 그리고 getPort() 메소드는 소켓이 연결된 원격 호스트와 포트를 알려준다. 또는 연결이 종료된 경우 연결된 당시의 호스트와 포트를 알려준다. getLocalAddress()와 getLocalPost() 메.. 더보기
[JAVA] 소켓 주소 및 프록시 서버(Client) SocketAddress 클래스는 연결 끝점(endpoint)를 나타낸다. 이 클래스는 추상클래스 이다. 사실상 현재는 TCP/IP 소켓만이 지원되며, 우리가 사용하는 소켓 주소들은 전부 InteSocketAddress의 인스턴스이다. SocketAddress 클래스를 사용하는 목적은 원본 소켓의 연결이 끊어지거나 GC(Garbage Collector)에 의해 사라진 경우에도 새로운 소켓을 생성하는 데 재사용할 수 있는 IP 주소와 포트 같은 일시적인 소켓 연결 정보를 위한 간편한 저장소를 제공하기 위함이다. 이를 위해서 Socket 클래스는 SocketAddress 객체를 반환하는 두 개의 메소드를 제공한다. public SocketAddress getRemoteSocketAddress()//연결된 시.. 더보기
JAVA 23일차 필기 모의 서버 package com.javalesson.ch21network; import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.Collections;import java.util.HashMap;import java.util.Iterator; public class L02TcpIpServer {HashMap clients; //데이터 구조 hash -> key 입력하면 value가 나오는 구조 //get이 엄청 빠르다 -> 멀티쓰레드 구조에서 무결성에 취약함 //무결성 ->ke.. 더보기
JAVA 22일차 필기 모의 소켓 통신 LAN으로 연결된 통신망에서 서버PC에 접속하기 위한 Client package com.javalesson.ch21network; import java.io.*;import java.net.Socket;import java.util.Scanner; class ClientSender extends Thread{String name;DataOutputStream out;public ClientSender(Socket socket, String name){this.name=name;try {out = new DataOutputStream(socket.getOutputStream());} catch (IOException e) {e.printStackTrace();}}public void run.. 더보기