'분류 전체보기'에 해당되는 글 31건

  1. 2018.02.01 MySQL Connection 문제
  2. 2015.12.30 Javascript 개요 2
  3. 2015.12.28 [Tip] 자바 비교연산
  4. 2015.12.28 MySQL 데이터타입
  5. 2015.12.28 예/아니오 창 만들기
  6. 2015.11.19 SharpPcap을 이용한 패킷 캡쳐(C#)
  7. 2015.11.10 DDD 사용법
  8. 2015.11.07 C언어 오류 유형
  9. 2015.11.04 오픈된 포트 확인
  10. 2015.11.04 프로세스 정보 얻어 오는 방법

DB Connection Pool 사용 중 가끔 데이터베이스 커넥션이 끊기는 현상 발생.


[오류로그 일부]

[org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was62250 seconds ago.The last packet sent successfully to the server was 62250 seconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.] 


해당 문제를 해결하기 위해서 'wait_timeout' 시간을 늘리거나 'autoReconnect=true' 설정을 사용하라는 문구가 보인다.


[wait_timeout]

- wait_timeout으로 설정된 시간이 초과되면 커넥션을 종료시키는 옵션이다.

- 옵션의 시간을 무한정 늘릴 수 없기 때문에 근본적인 해결책으로 보기 어렵다.


[autoReconnect=true]

- 해당 옵션은 쿼리 수행 다음 DB 세션에 문제가 있으면 단순히 SQLException을 리턴한 다음 재접속을 시도한다.

- 만약 트랜잭션 구동 환경이라면 수행중이던 작업은 롤백처리되어야 하고, 남은 작업들은 수행되지 말아야 하는데 해당 옵션은 이러한 작업을 처리하지 않는다.

- 따라서 해당 옵션 사용시 트랜잭션에 대한 처리를 따로 해주어야 한다는 문제가 있다.


==> 위와 같은 문제로 다른 파해법을 찾아 보니 validationQuery 라는 것을 찾게 되었다.


[validationQuery]

- 커넥션의 유효성을 검사하는 옵션

- 해당 옵션은 단순 검증을 위한 옵션이기 때문에 자원 소비를 최소화 하기 위해 아래와 같은 Query를 사용하도록 권장한다.

오라클 : SELECT 1 FROM DUAL

MSSQL : SELECT 1

MySQL : SELECT 1

CUBRID : SELECT 1 FROM DB_ROOT

- 설정

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    <property name="driverClassName" value="${Globals.DriverClassName}" />

    <property name="url" value="${Globals.Url}" />

    <property name="username" value="${Globals.UserName}"/>

    <property name="password" value="${Globals.Password}"/>

    <property name="defaultAutoCommit" value="true"/>

    <property name="validationQuery" value="select 1"/>

    <property name="testWhileIdle" value="true"/>

    <property name="timeBetweenEvictionRunsMillis" value="7200000"/>

</bean> 


[참고]

http://uip80.tistory.com/entry/24%EC%8B%9C%EA%B0%84-%EB%8F%99%EC%95%88-connection-%EC%98%A4%EB%A5%98-mysql

http://kshmc.tistory.com/entry/MyBatis-Datasource-%EC%B0%B8%EA%B3%A0

http://www.mybatis.org/mybatis-3/ko/configuration.html

http://d2.naver.com/helloworld/5102792

'SQL > MySQL' 카테고리의 다른 글

MySQL 데이터타입  (0) 2015.12.28
Posted by OnewayK
,

Javascript 개요

WEB/Javascript 2015. 12. 30. 14:43

자바스크립트란?


1. 웹 브라우저에 내장되어 있는 스크립트(script) 언어

- HTML의 각 요소에 접근, 제어


2. 객체지향(object oriented) 프로그래밍

- 한 프로그램을 구성하는 여러개의 조각들을 객체들로 파악한다.

- 객체들은 특정상태를 나타내는 속성과 행위를 나타내는 함수로 되어 있다.

- 프로그램이 실행되면 객체들이 서로 준비된 함수들을 이용해 메시지를 주고받고 데이터를 처리해 원하는 결과를 만들어냄

- 자바스크립트의 객체는 프로퍼티 이름과 프로퍼티 값의 쌍으로 존재. 프로퍼티에 값을 지정하면 속성이 되고, 함수를 지정하면 행위가 된다.

- 상속 지원


3. 인터프리터(interpreter) 방식

- 컴파일러 방식 : 프로그래밍 언어로 구성된 소스코드를 컴파일 하고 머신코드를 생성하고 머신코드를 실행(컴파일 타임과 런타임이 구분)

- 인터프리터 방식 : 컴파일 타임과 런타임이 구분되지 않아 런타임시 소스코드 번역과 실행을 모두 실행(과거에는 실행속도가 느리다는 평가를 받기도 함)


4. 동적이면서 약한 타입(dynamic and weak typing) 언어

- 다른 언어에 대한 경험이 있다면 쉽게 접근 가능

- 변수 선언시 데이터타입 명시하지 않음(대입한 값에 따라 데이터 타입 결정)



웹 개발환경의 변화


- 1994년 Brendan Eich가 개발

- 1995년 넷스케이프 네비게이터 2.0에 탑재

- 모든 웹 브라우저에 내장된 클라이언트 측 스크립트 언어

- 2005년 초 Ajax 기술의 보급으로 중요성 대두

- 2008년부터 가열된 웹 브라우저간의 자바스크립트 엔진 성능 경쟁

- 서버 측에서의 자바스크립트 프로그래밍

- 2009년 Ryan Dahl이 Node.js 개발

- HTML 5의 중심에 놓여 웹 표준으로서 위상을 가짐

- 모바일 환경까지 그 응용 범위의 세를 더욱 확장



모바일 앱 개발환경과 자바스크립트의 위상


- 2007년 아이폰의 등장과 함게 시작된 스마트폰의 열풍으로 엄청난 모바일 앱 시장의 성장

- 스마트 폰 플랫폼의 다양성으로 인한 문제 발생

+ 개발 비용의 증가, 유지보수 비용의 증가(아이폰/아이패드 - Object-C, C, C++ | 안드로이드 - Java, C | Windows - C#)

- 모바일 웹 브라우저의 신속한 HTML 5 지원

- JQuery Mobile, Sencha Touch 와 같은 모바일 웹 앱 개발 프레임워크 등장

- 모바일 웹 앱(mobile web app) - 속도의 한계

- 하이브리드 모바일 앱(hybrid mobile app) 대안 (네이티브 + 모바일 웹앱)

- 모바일 시대의 앱 개발에 있어 자바스크립트의 위상과 중요성이 날로 높아짐



자바스크립트 개발도구 설치


- 통합개발환경 Eclipse를 기반으로 한 Aptana Studio

- 오픈소스

- Windows, 맥OS, Linux  지원


'WEB > Javascript' 카테고리의 다른 글

예/아니오 창 만들기  (0) 2015.12.28
Posted by OnewayK
,

자바 NULL 비교시

자바에서는 비교문자.equals("")시 null을 비교 못하는 경우가 발생한다.

그래서 null값을 확인하고 싶다면 !"".equals(비교문자)를 하는게 좋다.


[사용법]

1. 비교문자 != null

2. !"".equals(비교문자)

3. 비교문자.length() != 0


[응용]

if(비교문자 != null && !"".equals(비교문자) && 비교문자.length() != 0){

// 수행기능

}

Posted by OnewayK
,

MySQL 데이터타입

SQL/MySQL 2015. 12. 28. 15:47

MySQL의 데이터 타입

[CHAR 데이터 타입]

CHAR와 VARCHAR는 모두 텍스트 문자열을 허용하고 필드의 크기를 제한한다. 두 타입의 차이점은 CHAR는 문자열의 크기가 한번 정해지면 정해진 크기보다 적은 크기의 문자열이 입력하더라도 해당 문자열의 크기를 유지한다는 것(공백으로 채워짐)이고, VARCHAR는 정해진 크기보다 적은 크기의 문자열을 입력하면 그에 맞게 가변적으로 크기를 갖게 된다. 하지만, VARCHAR는 각 값의 크기를 추적할 수 있는 약간의 오버헤드가 필요하기 때문에 모든 데이터의 크기가 비슷하다면, CHAR가 효율적이다.


TYPE

BYTE 

Exam 

CHAR(n) 

n Byte(최대 255 Byte) 

CHAR(5) 'Hello' : 5 Byte

CHAR(10) 'Hello' : 10 Byte 

VARCHAR(n) 

최대 n Byte(최대 65535 Byte)

VARCHAR(5) 'Hello' : 5 Byte

VARCHAR(10) 'Hello' : 5 Byte 


[BINARY 데이터 타입]

BINARY 데이터 타입은 


  BINARY 데이터 타입 

BINARY 데이터 타입은 관련된 문자 세트가 없는 문자의 전체 바이트를 저장하는데 사용된다. 예를 들면 GIF 이미지를 저장하는데 사용할 수 있다. 


TYPE  

사용되는 바이트 

예제 

BINARY(n) 혹은 BYTE(n) 

정확히 n (<=255) 

CHAR이지만 바이너리 데이터를 가짐 

 VARBINARY(n)

최대 n 까지(<=65535) 

VARCHAR이지만 바이너리 데이터를 가짐



  TEXT와 VARCHAR 데이터 타입

TEXT와 VARCHAR에는 작은 차이점이 있다. 


TEXT 필드는 기본 값을 가질 수 없다. 

MySQL은 TEXT 열의 처음 n 개의 문자만 인덱싱 할 수 있다. 


이것은, 만약 전체 내용을 검색할 때는 VARCHAR이 더 알맞고, 빠르다는 것이다.


 TYPE

사용되는 바이트 

속성 

 TINYTEXT(n)

최대 n (<=255)

문자열로 취급

 TEXT(n)

최대 n (<=65535)

문자열로 취급

 MEDIUMTEXT(n)

최대 n (<=16777215)

문자열로 취급

 LONGTEXT(n)

최대 n (<=4294967295)

문자열로 취급



  BLOB 데이터 타입

BLOB(Binary Large OBject)는 65535 바이트를 넘는 바이너리 데이터에 유용하며, 기본 값을 가질 수 없다. 


 TYPE

사용되는 바이트 

속성 

TINYBLOB(n)

최대 n (<=255)

바이너리 데이터로 취급

 BLOB(n)

최대 n (<=65535)

바이너리 데이터로 취급

 MEDIUMBLOB(n)

최대 n (<=16777215)

바이너리 데이터로 취급

 LONGBLOB(n)

최대 n (<=4294967295)

바이너리 데이터로 취급



  숫자형 데이터 타입


 TYPE

사용되는 바이트 

최소 값

(signed/unsigned) 

대 값

(signed/unsigned) 

TINYINT

-128

127
255 

SMALLINT 

-32768

32767
65535 

MEDIUMINT

-8388608

8388607
16777215 

INT or INTEGER

-2147483648

2147483647
4294967295 

BIGINT

-9223372036854775808

9223372036854775807

18446744073709551615

FLOAT

-3.40E+45
(no unsigned) 

3.40E+45

(no unsigned) 

DUBLE or REAL

-1.7976E+320
(no unsigned)   

1.7976E+320
(no unsigned)   




'SQL > MySQL' 카테고리의 다른 글

MySQL Connection 문제  (0) 2018.02.01
Posted by OnewayK
,
confirm() : "예", "아니오"를 묻는 창
alert() : OK 버튼만 있는 창

<script language="javascript">

function confirm(){

msg = "예/아니오 창입니다.";

if(confirm(msg)!=0){

// Yes시 동작하는 기능

} else{

// No시 동작하는 기능

}

}

</script> 



'WEB > Javascript' 카테고리의 다른 글

Javascript 개요  (2) 2015.12.30
Posted by OnewayK
,

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using SharpPcap;

namespace sharppcap1

{

    class Program

    {

        static void Main(string[] args)

        {

            // Print SharpPcap version

            string ver = SharpPcap.Version.VersionString;

            Console.WriteLine("SharpPcap {0}, Example1.IfList.cs", ver);

            // Retrieve the device list

            CaptureDeviceList devices = CaptureDeviceList.Instance;

            // If no devices were found print an error

            if (devices.Count < 1)

            {

                Console.WriteLine("No devices were found on this machine");

                return;

            }

           

            Console.WriteLine("\nThe following devices are available on this machine:");

            Console.WriteLine("----------------------------------------------------\n");


            int i = 0;

            // Print out the devices

            foreach (var dev in devices)

            {

                /* Description */

                Console.WriteLine("{0}) {1} {2}", i, dev.Name, dev.Description);

                i++;

            }

            Console.WriteLine();

            Console.Write("-- Please choose a device to capture: ");

            i = int.Parse(Console.ReadLine());


            // Extract a device from the list

            ICaptureDevice device = devices[i];

            // Open the device for capturing

            int readTimeoutMilliseconds = 1000;

            device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);

            Console.WriteLine();

            Console.WriteLine("-- Listening on {0}...",

                device.Description);

            RawCapture packet = null;

            System.Net.IPAddress srcIP;

            System.Net.IPAddress dstIP;

            

            // Keep capture packets using GetNextPacket()

            while ((packet = device.GetNextPacket()) != null)

            {

                // Prints the time and length of each received packet

                   

               

                var tcpPacket = PacketDotNet.Packet.ParsePacket(packet.LinkLayerType, packet.Data);

                var Packetinfo = PacketDotNet.TcpPacket.GetEncapsulated(tcpPacket);

                if (Packetinfo != null)

                {

                    var ipPacket = (PacketDotNet.IpPacket)Packetinfo.ParentPacket;

                    srcIP = ipPacket.SourceAddress;

                    dstIP = ipPacket.DestinationAddress;

                    DateTime time = packet.Timeval.Date;

                    var len = packet.Data.Length;

                    Console.WriteLine("{0}:{1}:{2},{3} Len={4}, {5}->{6}",

                        time.Hour, time.Minute, time.Second,

                        time.Millisecond, len, srcIP, dstIP);

                }

            }

            // Close the pcap device

            device.Close();

            Console.WriteLine(" -- Capture stopped, device closed.");

 

        }

     }

}

Posted by OnewayK
,

DDD 사용법


A.    정의

Display Data Debugger로 다른 디버거보다 사용하는데 편리한 인터페이스를 제공하고, 디버깅에 필요한 환경을 손쉽게 설정할 수 있다. 기본적으로 gdb를 기반으로 하여 인터페이스만을 제공한다.

 

B.    설치

Ubuntu : $ sudo apt-get install ddd

 

C.    실행

$ ddd

$ ddd <program>

$ ddd <program> core

“core”라는 파일은 프로그램의 실행 중에 문제가 있을 때마다 생성되는 파일로 프로그램에 대한 많은 정보를 담고 있다. 만약 시스템이 코어덤프를 만들지 않는다면 코어에 관련된 환경 변수를 확인하면 된다.

$ ddd <program> <process_id>

       process_id는 프로그램이 실행되고 있는 중간에도 디버깅을 할 수 있게 해준다.

 

D.    DDD창 설명

 

-       소스창 : 브레이크 포인트 설정, 자료구조 선택 등에 사용

-       명령창 : ddd 명령어 집합을 나타내며, 사용자는 이를 통해 명령을 내림

-       gdb 콘솔 : gdb에게 직접 명령을 내리거나 ddd에서 print 명령에 대한 결과 출력시 사용

 

E.     명령어

-       Interrupt : 프로그램 강제 종료

-       Step : 프로그램을 한 행씩 수행, 함수 호출을 만나게 되면 함수 내부로 들어감

-       Next : 프로그램을 한 행씩 수행, 함수 호출을 만나면 함수 내부로 들어가지 않음

-       Stepi : 어셈블리 레벨에서 명령어 하나씩 수행, Step과 같이 함수 호출을 만나면 함수 내부로 들어감

-       Nexti : 어셈블리 레벨에서 명령어 하나씩 수행, Next와 같이 함수 호출을 만나면 함수 내부로 들어가지 않음

-       Until : 반복문을 벗어남

-       Finish : 함수를 벗어남

-       Cont : 다음 브레이크 포인트를 만날 때까지 계속 수행

-       Kill : 프로그램 수행 종료

-       Up : 상위 스택 프레임으로 이동

-       Down : 하위 스택 프레임으로 이동

-       Undo : 이전 상황으로 자료구조 값들을 되돌림

-       Redo : Undo 수행 이전 상황으로 되돌림

-       Edit : 소스의 내용이 수정되었다면 수정된 소스를 소스창에 보이기 위해 사용

-       Make : 프로그램을 새로 컴파일

 

F.     Break Point

-       Break Point 생성을 원하는 지점의 행이 시작되는 부분에 마우스 오른쪽 버튼 클릭

-       Set Break Point 선택

 

G.    Break Point 메뉴

-       Set Temporary Breakpoint : 일회성 브레이크 포인트 생성, X가 붙은 STOP 마크로 표현

-       Countinue Until Here : 반복문 수행 중 각 반복 후 멈출 위치를 지정

-       Set Execution Position : 프로그램 실행 경로를 지정한 위치로 점프

 

H.    Break Point 조건 설정

-       Break Point에서 마우스 오른쪽 버튼 클릭

-       Properties 선택

-       Condition 속성 설정 후 조건 지정

 

I.      Break Point 설정 메뉴

-       Disable Breakpoint : 브레이크 포인트를 일시적으로 끔

-       Delete Breakpoint : 설정한 브레이크 포인트 제거

Posted by OnewayK
,

[에러의 종류]

런타임 에러

실행시에 발생하는 에러.

대부분 프로그래밍시의 설계미숙으로 일어나며, 외에 기계적 결함 등으로 일어나기도 한다. 설계 실수로 인한 오류인 경우 대표적으로 무한 루프(반복문 안의 조건문의 실수로 인해 반복문을 빠져 나가지 못함) 또는 xx/0 등이 있다.

 

컴파일타임 에러

컴파일시 발생하는 에러.

대부분이 문법적인 오류. 경우 컴파일이 되지 않고 Warning이나 Error 문구가 상태창에 뜨게 된다.

문법 오류와 의미적 오류 등이 있으며, 문장을 끝내는 세미콜론(;)이나 조건문이나 반복문 등의 형식이 맞지 않아서 발생하는 Syntax Error(신택스 에러), 데이터 타입 에러, 함수 선언 에러 여러 가지 에러가 있다.

 

논리 에러

논리 오류로 인해 발생하는 에러.

프로그램 실행은 되지만 프로그래머가 의도하지 않은 결과가 나오는 경우이다.

주로 알고리즘 계산 미스, 복잡한 반복문을 확실하게 설계해놓지 않고 쓰는 경우 발생한다.

 

[에러의 예시]

1. 오류 코드로 보는 오류 유형

error C2228: Left of .identifier must have class/struct/union type

- 원인

class struct, union으로 선언한 변수를 사용하는 경우 .identifier부분이 class, struct union에서 정의한 변수명이 아닌 경우, 혹은 포인터를 사용하면서 -> 아니라 .으로 사용한 경우 발생

- 해결법

class, struct, union에서 선언한 변수명과 맞는지 체크하고 포인터 사용하는 경우 . 아닌 -> 접근

 

error C2143: syntax error : missing ; before if

- 원인

if 발생 이전에 ; 빠진 경우에 발생

- 해결법

명령어가 끝나는 곳에 ; 붙여준다.

 

error C2065: .identifier : undeclared identifier

- 원인

.identifier 선언되지 않고 사용되는 경우에 발생

- 해결법

.identifier 부분 스펠링 확인, 대소문자 확인, 헤더파일이 정확히 include되었는지 확인

 

error C2106: = left operand must be 1-value

- a=b 경우 a쪽에 b 값을 넣을 없는 경우에 발생

 

error LNK2001: unresolved external symbol _main

error LNK1120: 1 unresolved externals

- main 부분을 찾을 없는 경우 발생

 

error C1010: unexpected end of file while looking for precompiled header directive

- 원인

비주얼C에서 precompiled header *.c혹은 *.cpp파일에 include하지 않은 경우 발생

- 해결법

소스파일에 #include stdafx.h추가

Project-setting0c/c++ tab Project Option text bok에서 /Yustdafx.h부분을 찾아 삭제

 

error C2143: syntax error : missing ; before }

error C1004: unexpected end of file found

- 원인

{ } 쌍이 맞지 않는 경우 발생

C2143 경우 } 개수가 { 개수보다 많은 경우

C1004 에러의 경우 { 개수가 } 개수보다 많은 경우

- 해결법

{ } 개수를 맞게 조정

 

error C2146: syntax error: missing ; before identifier printf

- 원인

printf 앞에 세미콜론(;) 빠짐

- 해결법

세미콜론(;) 빠진 곳에 세미콜론(;) 추가

 

2. 오류 문구로 보는 오류 유형

2-1. 호출 / 선언시

warning C4013: printf undefined; assuming extern returning int

- printf 문을 호출하기 위한 #include<stdio.h> 선언하지 않음

 

a : undeclared identifier

- 변수 a 선언되지 않았다. 선언(int, float ) 변수가 없음

 

Declaration is not allowed here

- while, for, do, if, switch 등의 제어문에는 선언문이 없다.

 

Invalid Indirection

- 간접 연산자(*) void pointer 선언이 필요 없음

ex)

int main (void)

{

             void *p;

             *p = 10; // Invalid Indirection

             return 0;

}

 

Multiple declaration for identifier

- identifier(변수나 함수 ) 한번 이상 또는 중복 선언되었다.

ex)

int a;

float a;

 

2-2. 빠뜨림

syntax error : missing ) before ;

- 세미콜론 앞에 ) 빠짐

 

( expected

) expected

, expected

< expected

{ expected

} expected

- (, ), , , <, {, }, :, ; 등이 빠졌음

 

Declaration syntax error

- 원인

프로그램 선언부에서 symbol 빠졌거나 추가가 필요하다는 의미

- 해결법

현재의 라인이나 이전의 라인에서 세미콜론(;)이나 괄호({,}) 등을 검사해야 한다.

 

Undefined symbol identifier

- 사용된 변수 등이 선언부에 빠짐

- 철자상의 오류

 

Case statement missing :

- case 문은 다음에 : 빠졌다.

 

Declaration missing ;

- struct union 선언문에는 반드시 끝에 세미콜론(;) 나와야 한다.

 

Declaration terminated incorrectly

- 함수에서 세미콜론 등이 잘못 위치하여 프로그램에 오류가 발생하여 종료

 

Declaration was expected

- 필요한 부호가 빠졌다는 의미.

- 콤마(,), 세미콜론(;), 괄호((,),{,}) 등이 빠짐

 

Unable to open include file filename

- 컴파일러가 명명한 파일 이름을 찾을 없을

- 파일이 존재하지 않거나 경로가 올바르지 않은 경우

 

Undefined label identifier

- goto 문과 상응하는 label 정의가 없음

 

Compound statement missing }

- 중괄호 ({, }) 불일치

 

Array bounds missing ]

OR Delete array size missing ]

OR Operator [] missing ]

OR Subscripting missing ]

- ] 빠졌다. [ 연산자로 선언되었다.

 

2-3. 문법 구조 오류

Cannot case from type1 to type2

- type 1 type 2 서로 일치 하지 않은 경우

- 포인터는 정수형과 실수형으로 cast 할수 있지만 구조체나 배열은 어느 것으로도 cast 불가능

Misplaced break

- break 문은 switch 문이나 루프 안에서만 사용

 

Misplaced countinue

- continue 문은 루프 안에서만 사용 가능하다.

 

Ambiguity between function1 and function2

Address of overloaded function function doest match type

- 함수 사이의 변수가 일치하지 않는다.

 

Array must have at least one element

- 배열은 하나 이상의 요소가 함께 선언되어야 한다.

 

Cannot overload main

- main 한번 이상 쓰였다.

 

Undefined symbol identifier

- identifier 선언되지 않았다.

 

Abnormal program termination

- 주로 메모리 부족으로 인한 오류

 

Divide error

Floating point error: Divide by 0

- 0으로 나누었을 발생

 

Posted by OnewayK
,

IP 주소로 PC에 해당 포트가 오픈되어 있는지 확인


using System;

using System.Text;

using System.Net.Sockets;

using System.Net.NetworkInformation;

using System.Net;



public class CheckPort

{


    public static void Main(string[] args)

    {

        try

        {

if (args.Length < 1)

{

Console.WriteLine("Usage : CheckPort.exe [IP] [Port]");

Console.WriteLine("        CheckPort.exe 192.168.0.1 80");

return;

}

string ip = args[0];

int port = Convert.ToInt32(args[1]);

if (PingTest(ip))

{

Console.WriteLine("{0} PING OK", ip);

if (ConnectTest(ip, port))

{

Console.WriteLine("{0}:{1} is open.", ip, port);

}

else

{

Console.WriteLine("{0}:{1} is closed.", ip, port);

}

}

else

{

Console.WriteLine("{0} PING NG", ip);

}

}

        catch (Exception e)

        {

            Console.WriteLine(e.Message);

        }


    }  

private static bool PingTest(string ip)

{

bool result = false;

try

{

Ping pp = new Ping();

PingOptions po = new PingOptions();


po.DontFragment = true;


byte[] buf = Encoding.ASCII.GetBytes("aaaaaaaaaaaaaaaaaaaa");


PingReply reply = pp.Send(

IPAddress.Parse(ip),

10, buf, po

);


if (reply.Status == IPStatus.Success)

{

result= true;

}

else

{

result = false;

}

return result;

}

catch

{

throw;

}

}



private static bool ConnectTest(string ip, int port)

{

bool result = false;


Socket socket = null;

try

{

socket = new Socket(

AddressFamily.InterNetwork,

SocketType.Stream, 

ProtocolType.Tcp

);


socket.SetSocketOption(

SocketOptionLevel.Socket,

SocketOptionName.DontLinger,

false

);



IAsyncResult ret = socket.BeginConnect(ip, port, null, null);


result = ret.AsyncWaitHandle.WaitOne(100, true);

}

catch { }

finally

{

if (socket != null)

{

socket.Close();

}

}

return result;

}



}





netstat 구현


using System;

using System.Net;

using System.Net.Networkinformation


namespace MyNetstat

{

class Program

{

static void Main(string[] args)

{

IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();


IPEndPoint[] endPoints = ipProperties.GetActiveTcpListeners();

TcpConnectioninformation[] tcpConnections = ipProperties.GetActiveTcpConnections();


foreach(TcpConnectioninformation info in tcpConnections)

{

Console.WriteLine("Local: " + info.LocalEndPoint.Address.ToString() 

+ ":" + info.LocalEndPoint.Port.ToString() 

+ "\nRemote: " + info.RemoteEndPoint.Address.ToString() 

+ ":" + info.RemoteEndPoint.Port.ToString() 

+ "\nState : " + info.State.ToString() + "\n\n");

}

Console.ReadLine();

}

}

} 

'LANGUAGE > C#' 카테고리의 다른 글

프로세스 정보 얻어 오는 방법  (0) 2015.11.04
Posted by OnewayK
,

실행중인 프로세스 이름 받아 오기 : Process[] process = Process.GetProcessByName

실행중인 프로세스 종료 : process[0].KILL()


밑에 표는 도대체 뭔지 모르겠지만 일단 Keep....

ProcessStartInfo CMD = new ProcessStartInfo();

Process pro = new Process();

CMD.FileName = @"cmd"; // 실행할 응용프로그램의 경로를 설정


CMD.Window Style = ProcessWindowStyle.Hidden; // 실행할 프로그램을 숨긴다????

CMD.CreateNoWindow == true; // 실행할 프로그램의 창을 생성하지 않는다???????


CMD.UseShellExecute = false;

// 프로세스를 시작할 때 운영체제 셸을 사용할지 여부를 나타내는 값을 가져오거나 설정한다.

// 라고 MSDN이 그러는데 뭔소린진 잘 모르겠다....?????

CMD.RedirectStandardOutput = true; // CMD 창의 내용을 가져오기

CMD.RedirectStandardInput = true; // CMD 창의 데이터를 보내기

CMD.RedirectStandardError = true; // 오류내용 가져오기


pro.EnableRaisingEvents = false;

// 프로세스가 종료될 때 exited 이벤트를 발생시키지 않는다.

pro.StartInfo = CMD; // ProcessStartInfo의 인스턴트인 CMD를 넣어줌

pro.Start(); // 시작

pro.StandardInput.Write(@"Hi! I'm LOGIC!" + Environment.NewLine);

//마무리로 Environment.NewLine이 꼭 필요하다고 한다.

pro.StandardInput.Close(); // 닫음


textBox1.Text = process.StandardOutput.ReadToEnd();

// 해당 프로세스의 내용을 스트림으로 끝까지 읽어온다.

pro.WaitForExit();

pro.Close(); // 프로세스 종료

// textbox1에 CMD의 내용을 출력한다.


이건 도움이 되겠다!!(표에 안들어갈까...ㅠㅠ)

-----------------------------------------------------------------------------------------------------

using System;

using System.Collections.Generic;

using System.Diagnostics;

 

namespace ProcessInfoWrite

{

    class Program

    {

        static void Main(string[] args)

        {

            try

            {

                Process[] allProc = Process.GetProcesses();    //시스템의 모든 프로세스 정보 출력

                int i = 1;

                Console.WriteLine("****** 모든 프로세스 정보 ******");

                Console.WriteLine("현재 실행중은 모든 프로세스 수 : {0}", allProc.Length);

                foreach (Process p in allProc)

                {

                    Console.WriteLine("***** {0}번째 프로세스 ******", i++);

                    WriteProcessInfo(p);

                    Console.WriteLine();

                }

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

        }

 

        private static void WriteProcessInfo(Process processInfo)

        {

            Console.WriteLine("Process : {0}", processInfo.ProcessName);

            Console.WriteLine("시작시간 : {0}", processInfo.StartTime);

            Console.WriteLine("프로세스 PID : {0}", processInfo.Id);

            Console.WriteLine("메모리 : {0}", processInfo.VirtualMemorySize);

        }

    }

}

'LANGUAGE > C#' 카테고리의 다른 글

오픈된 포트 확인  (0) 2015.11.04
Posted by OnewayK
,