C# + Unity

[C#] 크로스 스레드 작업이 잘못되었습니다. 오류 해결하기 포스트 Teaser

[C#] 크로스 스레드 작업이 잘못되었습니다. 오류 해결하기

카테고리:

최대 1 분 소요

문제 상황 C#으로 멀티 스레드 프로그래밍을 하다보면, 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스하는 경우에 아래와 같은 메시지를 출력한다. 이럴 때는 Invoke함수를 사용하여 컨트롤이 자신이 만들어진 스레드 아닌 스레드에서의 함수 호출을 위임한다. 소스 코드 아래의 텍스트박스의 텍스트를 바꾸는 예제이다. private void InvokeAccess(TextBox textBox, string data) { if (textBox.InvokeRequired) { textBox.Invoke((MethodInvoker) delegate { textBox.Text = data; }); } else { textBox.Text = data;

[C#] Enum을 ComboBox item에 집어넣기 포스트 Teaser

[C#] Enum을 ComboBox item에 집어넣기

카테고리:

최대 1 분 소요

문제 상황 C#으로 프로그램을 만들다 보면 Enum을 ComboBox item에 집어넣어야 하는 상황이 가끔 생긴다. Linq를 사용하여 Enum을 Object[]로 만들어서 ComboBox에 넣으면 되는데, 다소 복잡하다. 소스 코드 comboBox1.Items.AddRange(Enum.GetValues(typeof(MyEnum)).OfType<object>().ToArray()); Enum.GetValues만 사용하면 반환 값이 System.Array로 나와 []로 캐스팅 하기 위해서 .OfType<object>().ToArray()를 사용한다.

[C#, OpenCL] OpenCL로 SHA1 연산하기 포스트 Teaser

[C#, OpenCL] OpenCL로 SHA1 연산하기

카테고리:

9 분 소요

Nuget C#에서 OpenCL을 사용하고자 할 때, 여러 방법이 있지만 보통 Nuget Package에서 Cloo를 추가하여 사용한다. 1. kernelSource 작성 본격적으로 OpenCL을 사용하기 이전에, 아래와 같이 kernelSource를 작성해야한다. 마땅히 참고할 소스코드가 없어, https://en.wikipedia.org/wiki/SHA-1 의 pseudocode를 참조하여 구현하였다. __kernel void sha1(__global const unsigned char* data, int length, __global uint* digest) { int num_blocks = length / 512; uint h0 = 0x67452301; uint h1 =

[C#, webhacking.kr] Challenge 4번 풀기 포스트 Teaser

[C#, webhacking.kr] Challenge 4번 풀기

카테고리:

4 분 소요

문제 상황 일반적인 webhacking.kr의 문제는 preg_match 회피 및 sql injection이 주를 이루지만 challege 4는 기존의 문제들과는 양상이 다르다. 아래는 challenge 4의 소스코드 중 일부이다. <?php sleep(1); // anti brute force if((isset($_SESSION['chall4'])) && ($_POST['key'] == $_SESSION['chall4'])) solve(4); $hash = rand(10000000,99999999)."salt_for_you"; $_SESSION['chall4'] = $hash; for($i

[C#] FloodFill 알고리즘과 땅따먹기 포스트 Teaser

[C#] FloodFill 알고리즘과 땅따먹기

카테고리:

4 분 소요

땅따먹기 기본적으로 땅따먹기는 paper.io와 같이 넓은 땅 위에 자신의 시작 지점을 정하고 말을 움직이며 선을 그려 다시 본인의 선에 닿으면 해당 부분 만큼 본인의 땅이 되는 게임이다. 땅따먹기가 사각형만 되었어도, 구현에 어려움을 느끼지 않겠지만 아래와 같이 그려지기 시작하면 내부를 어떻게 채워야 할까 머리가 아파진다. FloodFill 알고리즘 Flood fill 알고리즘은 일반적으로 2차원 배열에서 사용되는 컴퓨터 그래픽스 및 이미지 처리에서 사용되는 알고리즘이다. 이 알고리즘은 영역 채우기를 위해 사용되며, 특정 시작 지점에서부터 인접한 영역을 찾아 동일한 색으로 채우는 과정을 반복한다. 주어진 시작 좌표를 기준으로 상하좌우로 인접한 픽셀을 검사하면서 같은 색으로 채워진 영역을

[C#] HttpWebRequest 루트 인증서와 해당 도메인 인증서 확인하기 포스트 Teaser

[C#] HttpWebRequest 루트 인증서와 해당 도메인 인증서 확인하기

카테고리:

2 분 소요

RemoteCertificateValidationCallback RemoteCertificateValidationCallback은 HTTPS 인증서를 확인할 수 있게 해준다. 단, UNITYTLS_X509VERIFY_FLAG_NOT_TRUSTED’라는 메시지가 나오면서 Unity상에서는 위와 같은 방법을 사용할 수 없다. 왜냐하면 현재와 같이 루트 인증서와 비교하여 검증하기 위해 OpenSSL/MbedTLS를 사용하는 대신 시스템별 TLS API를 통해 검증을 수행함으로써 이 문제를 해결할 수 있을지 모르지만, 이 해결방법은 서로 다른 운영체제에서 작동되지 않을 가능성이 크기 때문에 Unity상에서 구현을 하지 않았다고 한다. https://docs.microsoft.com/ko-kr/dotnet/ap

[C#] 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다. 포스트 Teaser

[C#] 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다.

카테고리:

최대 1 분 소요

문제 상황 C#에서 HttpWebRequest를 이용하여 서버와 통신할 때, ‘기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다.’와 같은 오류가 나온다면, 해결방법은 다음과 같다. 문제 해결 해당 프로젝트의 프레임워크 버전을 4.5.2이상으로 올린다. 아래 코드를 적용한다. ServicePointManager.SecurityProtocol |= SecurityProtocolType.Ssl3; ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls; ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11; ServicePointManager.Secu

[C#] Excel 읽고 쓰기 포스트 Teaser

[C#] Excel 읽고 쓰기

카테고리:

3 분 소요

Nuget 패키지 추가 C#에서는 ‘Microsoft.Office.Interop.Excel’를 참조하면 엑셀 파일을 불러들여서 읽고 쓰기를 수행할 수 있다. 사용 방법은 프로젝트 생성 → Nuget 패키지 관리 → Microsoft.Office.Interop.Excel 선택 소스 코드 using System.IO; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace CsharpUseExcel { public partial class Form1 : Form { public Form1() { InitializeComponent(); }