목록Programming (132)
외로운 Nova의 작업실
안녕하세요. 오늘은 지난시간에 이어 half-close()함수에대해 배워보겠습니다. half-close()함수를 설명하기에 앞서 필요성에대해 설명해보겠습니다. 서버와 클라이언트 사이에 통신할때 아래와 같은 상황이면 서버는 마지막 클라이언트의 문자열을 받지못합니다. 그전에 EOF라는게 있는게 EOF란 End Of File 이라는 뜻입니다. 소켓에서는 closesocket()함수를 사용할때 상대에게 EOF가 전달이됩니다. 그럼 한번 흐름을 봅시다. 1. 클라이언트 ---연결요청 --> 서버 2. 서버 --- 파일데이터 --> 클라이언트 3. 서버 ---EOF(closesocket()) --> 클라이언트 4. 클라이언트 ---"Thank you" --> 서버 위 상황에서 3번의 흐름에 서버는 closesock..
안녕하세요, 이번시간에는 저번시간에 못했던 문제 해결과 UDP연결 방법에대해서 포스팅 해볼까합니다. 저번 시간에 echo서버 구현중 계속 클라이언트쪽에서 이상한 문자열이 반복되어 나타나는 현상이있었는데요. 그 현상은 바로 send(),recv()함수의 전달 문자열의 크기 때문이였습니다. 저번 코드를 잠깐 보자면, 아래는 서버 코드 (messLen = recv(clntSocket, message, BUF_SIZE - 1, 0) send(clntSocket, message, BUF_SIZE, 0); 아래는 클라이언트 코드 send(hostSocket, message, strlen(message), 0); messageLen = recv(hostSocket, recvMessage, BUF_SIZE - 1, 0..
안녕하세요, 지난 3장에서는 hello worl를 서로 받아서 클라이언트가 출력하는 소켓프로그래밍을 진행했었습니다. 이번 4장에서는 좀 더 업그레이드 버전인 에코 서버를 구현해보려고했습니다. 에코 서버란 클라이언트가 서버에게 특정 문자열을 보내면 서버가 다시 그 문자열을 클라이언트에게 전송해 출력해내는 서버입니다. 예를 들어 클라이언트가 "안녕"이렇게 보내면 서버도 "안녕" 이렇게 클라이언트에게 보내지고 클라이언트는 그 문자열을 콘솔창에 출력하게됩니다. 오늘 안으로 끝내려고했지만 이상한 오류를 마주하게됬습니다. 그게 뭐냐면 클라이언트가 문자열을 보내면 서버에서 잘 받지만 클라이언트에서 출력할때 ?문자에서 儆 문자로 계속 변경 됩니다. 이에관해서 고민해봤지만 결국 답을 알 순 없었습니다. 책은 윤성우의 t..
저번 2장에서 정리한것들을 기반으로 간단하게 소켓서버를 만들어보고 클라이언트가 접속하면 hello world 문장을 클라이언트에게 줘서 클라이언트가 콘솔에 출력하는 콘솔앱을 한번 만들어보겠습니다. 저번시간에는 이번 3장에서 쓸 내용들을 정리해봤는데요, 이번 장을 공부하면서 정의가 필요하다면 2장으로 넘어가서 보고 오면 이해가 되실겁니다. 먼저, 컴퓨터간의 통신은 굉장히 복잡하게 이루어져있습니다. 하드웨어적으로 구현 가능해야하다보니 필요한 조건들도 많습니다. 가령 통신을 할려면 sin_family를 정해줘야하는 것같이 말이죠. 저 sin_family를 모르신다면 지난 2장으로 넘어가서 한번 봐주시고 이해해주시기바랍니다. 또한 소켓 프로그래밍은 최소 c언어 책한권은 다읽어보고 예제까지 다 구현이 가능했다하시..
유튜브만 보고 만들어 보려했는데 좀 더 깊이 알고싶어서, 책을 삿습니다. 윤성우의 열혈 tcp/ip 프로그래밍을 삿습니다. 이 책을 정독한 후에 채팅 프로그램을 만들어볼 생각입니다. 책을 읽고 윈도우 운영체제 기반 소켓프로그래밍에 관련된 함수들을 정리해볼생각입니다. 결국에 프로그래밍을 배운다는건 이미 만들어져있는 라이브러리에 정의된 함수, 구조체, 상수들을 알고 활용한다는 것이라고 생각합니다. 아래는 winsock.h 헤더파일에 들어있는 여러가지 함수,구조체 상수들 입니다. 아래 함수들이 어떻게 작동하는지가 아닌 앞으로의 프로그램 만드는 과정에 있어서 함수나 구조체의 정의가 필요할때면 이번 2장으로 와서 정의를 확인하는게 좋을 것 같아서 이번 2장에는 정리만 하겠습니다. 앞으로 새로운 함수나 구조체가 정..
구동 버전 intel i5 - window10 양방향 채팅프로그램을 하려면 컴퓨터로 네트워크를 다뤄야한다.네트워크는 c에서 소켓이라는 객체로 다루어진다.이를 소켓프로그래밍이라고하는데 이는 처음이라서 유튜브로 정독후에 프로그래밍을 하려고 생각하고있다.좋은 유튜브 영상이있어서 공유하려한다.아래들어가보면 책한권의 내용이 유튜브40편에 다 담겨있다. 다 보고 프로그래밍을 해볼예정이다.https://youtu.be/p3giFcDeCjE 오늘은 8편정도 봣다. 이번주 주말까지 몰아보고 다음주 월요일부터 할까 생각중이다
이번에는 실수도 계산이 가능하게 만들어볼 생각이다. 일단 아래는 계산기 모양이다. 원래는 실수+정수, 정수+실수,실수-정수.... 경우의수를 나눠서 해야할것같았는데 너무 복잡한 코드가 나올것같았다. 간단하게 코드를 작성하기위해 계속 고민했는데, 답을 얻었다. 바로 속으로는 다 실수형으로 계산하고 겉으로는 정수값이면 정수형으로 표시하는것이다. 그러면 한가지 함수가 필요한데, 해당 숫자가 정수형인지 실수형인지 판단하는 함수가 필요하다. 그 함수구현은 10.0-10 = 0 인점을 이용해서 구현했다. 아래는 관련 함수이다. private int IsIntOnNumber(Double Db)//실수형 자료가 정수인지 판단해서 정수형이면 1반한 실수면 -1반환 { if(Db - ((int)Db) == 0) { ret..
오늘은 내가 했던 계산기록들과 백스페이를 누르면 방금햇던 입력이 취소되는 기능을 추가했다. 먼저 아래는 계산기 모양이다. 계산기록들은 report라는 txt파일 만들어서 거기에다 파일 입출력기능으로 구현했다. 관련 자료 영상은 아래와 같다. https://www.youtube.com/watch?v=9PeiY4FzDf4 Stream파일 객체를 사용하여 구현했다. 아래는 관련 코드이다. private void WriteReport()//연산을 하는 식을 텍스트 파일에 쓰고 닫음 { StreamWriter wr = new StreamWriter("Report.txt", append : true); wr.WriteLine(SubResultLabel.Text + Screen.Text); wr.WriteLine("..
저번에 더하기 빼기만 있는 계산기프로그램을 만들어보았다. 이번에는 곱하기 나누기도 추가하고, 키보드와 계산기를 연결해볼것이다. 곱하기와 나누기를 추가하는것은 어렵지않았지만 키보드와 계산기를 연결하는것은 굉장히 어려웟다. 어려운 이유는 어떻게해야하는지 몰랐기 때문이다. 간략하게 설명하자면 enter버튼을 누르면 계산값이 나오게하고싶엇지만 막상해보면 마지막으로 누른 버튼이 계속 입력 되었다. 이 부분을 해결하는 부분이 어려웠다. 또한 키보드를 누르게되면 무엇이 키보드를 받는건지가 중요하다. 버튼이 키보드를 받을수 도 있지만 꼭 폼에 키보드를 입력해줘야한다. 또한 처음에 하게되면 키보드가 안먹히는데 이 안먹히는 이유도 아래에 간략하게 설명하겠다. 일단 아래는 계산기 모양이다. 나누기 버튼과 곱셈 버튼을 두었다..
어제 2개의 숫자와 더하기만 있는 계산기를 만들어보았다. 오늘은 더 발전 시켜서 0~9까지 숫자를 만들고 더하기와 빼기 cancel버튼 결과 버튼을 만들어 볼 것이다. 최대한 ui 버튼 이벤트 부분에선 코드작성이 아닌 함수 실행으로 구현해야 나중에 ui변경때 쉬움으로 최대한 그렇게 해봤다. 아래는 일단 계산기의 ui이다. 최대한 윈도우의 계산기 모양이랑 맞추려고 노력했다. 사용자들이 많이 쓰는 계산기 모양으로 만들어야 실수가 적다고 생각하기 때문이였다 이제 아래는 구현 코드이다. 이번에 구현하면서 좀 특별한 부분은 =버튼을 누르고 숫자버튼을 누르면 다시 처음부터 계산되게하고 +나- 버튼을 누르면 그 계산을 이어나가게 구현했다. namespace CalCulator { public partial class..