며칠전 tcp/udp 소켓 프로그래밍 테스트를 위해 툴이 없을지 질문했었는데...
https://www.clien.net/service/board/cm_app/17770955?od=T31&po=0&category=0&groupCd=CLIEN
결론적으로 소개해 주신 툴들이 라이센스 문제나 업무에 활용하기에 딱 맞지 않아서 (너무 범용적인 툴이라서)
이번 기회에 제가 윈도우 GUI 프로그래밍을 공부해보려고 합니다. 배워두면 나중에 또 써먹을 일 있을까 싶어서요.
제 목표는 아래와 같이 IP, PORT를 text 입력 받아서,
Connect 버튼 누르면 TCP 서버에 접속, Disconnect 버튼 누르면 TCP 서버에 접속 종료하는 프로그램입니다.
TCP connect/disconect 시 발생하는 성공/에러 결과는 아래 text box에 log처럼 누적해서 출력해주면 됩니다. (스크롤 기능)

일단 위 그림처럼 TCP connect/disconnect만 되는 예제만 있으면
추가로 버튼, text input 더 추가해서 TCP message send/read 기능 확장하는건 할 수 있을거 같습니다.
생각으로는 윈도우 프레임 만들고, 버튼, text box 배치하고,
버튼 누를때 tcp connect/disconnect 수행하는 function을 구글링해서 참고해 구현하면 될거 같은데
문제는 제가 GUI 프로그래밍을 전혀 할 줄 몰라서, Visual Studio Express 2017 을 어떻게 해야할지 모르겠습니다.
구글링을 열심히 해봤는데 위 화면과 같은 채팅 프로그램 예제를 찾지 못했습니다.
옛날 MFC 소스는 몇개 보이던데 Visual Stuio 6.0 시절 프로젝트 소스라서
개인이 무료로 설치할 수 있는 Visual Studio Express 2017 환경에서는 빌드가 안되더라구요.
질문: 윈도우 GUI 프로그램 입문시, 언어 선택?
- 1안 : Visual Studio Express 2017 에서 MFC로 C/C++ 코딩
WinForms? 가 나은건지 옛날 MFC가 쉬울지 잘 모르겠습니다.
혹시, 1안을 추천하신다면 입문용 MFC 관련 책 소개 부탁 드립니다.
- 2안 : Qt5 Creator로 Qt GUI 프로그래밍을 C++로 코딩
2년전쯤 Qt5/QML 프로젝트를 하면서 접한 경험이 있는데, Qt/QML은 분석/디버깅만 가능하고
GUI 경험이 없는 제가 QML로 뭘 처음부터 짜 넣는건 불가능했었습니다.
그래도 Qt/QML 코드 읽을 순 있으니, 이번 기호에 Q55를 배워보는게 나으려나요.
- 3안 : 어차피 처음 GUI 입문하는거 Python GUI 프로그래밍 코딩
Python이 쉽다고 해서, 입문을 해봐야 하나 싶습니다.
yes24에서 책 검색하다 보니 PyQt5라는것도 보이던데, 얘도 쉽게 GUI 코딩이 가능할까요?
http://www.yes24.com/Product/Goods/89510001YES24
혹시, Python을 추천하신다면 입문용 Python GUI 관련 책 소개 부탁 드립니다.
- 4안 : 어차피 처음 GUI 입문하는거 C# 으로 Visual Studio Express 2017 에서 코딩
C#도 쉽다는 말을 주워 들은적이 있어서, 입문을 해봐야 하나 싶습니다.
혹시, C#을 추천하신다면 입문용 C# GUI 관련 책 소개 부탁 드립니다.
GUI 없는 환경 embedded 환경에서 C 언어로만 코딩 해 온 개발자가 C++ 객체지향에 익숙하진 않은 상황에서
그래도 어느게 취미삼아 윈도우 GUI 프로그래밍 입문하기에 쉬울지 경험 있으신 분들의 조언 부탁 드립니다.
PS. 혹시 위 예시와 같은 Visual Studio Express 2017 나 Qt5 Creator 에서 빌드 가능한
TCP 채팅 클라이언트 example 소스가 배포된 주소를 아시면 공유 부탁 드립니다.
누가 해준 것을 조금만 고쳐서 좀 쉽게 쉽게 가보시고 싶으신 거 같은데,
기본 개념은 하셔야 할 겁니다.
이것 저것 옵션지를 제시를 해봐야 그게 큰 도움이 안되는게
내가 어떤 상태인지가 사람마다 다 다르기 떄문에 남한테 쉬운게 나한테는 어렵고 그럴 수 있습니다.
우스개로 클리앙에서 진리의 둘다 이런 말이 있지요.
그냥 당장 시작할 수 있는 것으로 해서 하나씩 해보면 됩니다.
최악의 경우에는 모드 다 시도해 볼수도 있겠습니디만,
남의 코드를 어떻게 찾아서 고치려고 하시지 말고 헬로 월드부터 새로 만들어서 하시는게 좋습니다.
알지 못하는데 남이 만든 코드를 쓰다보면 진짜 문제가 생겼을 어떤 이유로 그런 일이 일어나는지 파악도 안되고
뒤죽 박죽이 될 가능성이 높습니다.
결국 질문보다 실행이 더 필요하신 것 같습니다.
참고로 이런 GUI 라이브러리도 있습니다.
C하셨다니
https://github.com/ocornut/imgui 이런 라이브러리도 있습니다.
조언 감사합니다. 제가 마음이 급했나 보네요.
파이썬이나 C#이 쉽다고 들어서... 이번 기회에 입문해봐야 하나 싶었는데
일단 MFC가 7-8년전 살짝 경험이 있으니 vs 2017로 MFC 입문을 해보겠습니다.
MFC는 저도 예전에 한참 했었는데 지금 하신다면
너무 아닌 것 같습니다.
용기를 내셔서 새로운 걸음을 하시죠.
요즘 MFC 하는 사람도 없으니 고통을 받아도 혼자만 고통받을 확률이 높을 것입니다.
저 정도 GUI는 일도 아닙니다.
TCP/IP 관련 모듈도 잘 되어 있을 것 같구요.
저도 처음이었지만 최근에 강좌 사이트 보면서 간단하지만 꽤 유용한 프로그램 만들어서 나름 성과도 봤습니다.
그 다음은 PyQt 또는 PySide인데, 제 경우는 Qt의 C++ 도움말을 보면서 파이썬에 적용하는게
좀 까다로와서 잘 적응이 안 되더라구요. 어케 만들기는 해도 왜 되는지 모르겠고 남는 것도 없는
느낌이어서 주력으로 삼을 생각은 안 들었습니다.
조언 감사합니다.
c#이 유투브에 강좌가 많아 보이더라구요.
먼저 공부하신 경험이 있으셔서 한가지 부탁 드리고 싶은데
혹시 제가 그림그린 GUI 툴 만들수 있을만한 입문용 C# 책 추천해 주실수 있으실까요?
소켓 프로그래밍은 구글링해서 대충 갖다 붙이면서 하면 될거 같은데
껍데기 GUI 만드는걸 전혀 못해서 책 한권은 사보려고 하거든요.
아랫분들 말씀대로 MS를 주력으로 삼기에는 문제가 많아서, 저는 JavaScript에 본격적으로 도전해보려고 합니다. React가 짱 먹고 있다는 얘기에 혹해서.. (사실 저도 C 위주의 embedded가 본업입니다)
제가 필요한 tcp client 앱 구현을 위해, 제 8년전 옛 경험으로
옛날 vs 2005 버전으로 mfc gui 구현하면서 낡은 코딩 스킬을 기억에서 되살리기 보다는
어차피 윈도우 GUI 프로그래밍 스터디 할 맘 먹은 김에
최신 트렌트(?)에 맞는 gui 프로그래밍을 스터디 해보려고
C만 알고 있는 상황에서 위 언급한 tcp client 채팅 gui 앱 구현할 초급용 스킬이라면
어떤 언어랑 환경이 쉽고 간단할지 조언을 여쭙게 되었습니다.
최신 윈도우 GUI 프로그래밍 개발 또는 스터디 해 보신 경험 있으신 분들의
스터디 경험이나 스터디 할 때 참고할만한 링크나 책이 있다면 조언 부탁 드립니다.
IMGUI 이미 알려드렸습니다. 보시지 않으면 아무 소용이 없지요. 저라면 저걸 쓸 거 같습니다.
책으로 배우려고 한다면 그것도 요즘 트렌드에 맞지 않습니다.
대부분의 자료는 온라인에 다 있습니다.
몇시간만 IMGUI 예제돌리고 테스트하는데 걸리는 시간은 몇 시간이면 충분할 것입니다.
책을 찾을 시간에 공식문서 보고 헬로월드 돌리는게 제일 빠른 길입니다.
똑같은 답이지만, 쉽고 간단할지는 사람마다 다릅니다. 그걸 찾는 것 자체가
이미 본인이 목적한 바랑 상관없는 허상입니다.
그냥 바로 시작해보시면 압니다.
아 그래서 이거 내가 못할거구나 싶으면 외주를 주시던지, 회사일이라면 따로 얘기를 하시는게 좋습니다.
C# 이고 MFC 계열은 추천드리고 싶지 않은게 MS 는 이미 GUI 계열에서 너무 많은 삽질을 해서
개발자들 커리어를 애매하게 했습니다.
굳이 배우셔서 할거라면 이전과는 다른 방향도 해보시는게 다양성 측면에서 더 유리하지 않을까요?
기술셋이 다양할 수록 개발자의 생존성은 더 올라갈수 있지 않을까요?
조언 감사함니다.
IMGUI에 대한 부분도 찾아보고 스터디 해보겠습니다.
확실히 10년차를 넘어서 15년차를 향해 나이를 먹다 보니
과거에 익숙했던 방식인 책으로 스터디하려는 습성이 바뀌지가 않네요.
새로운 기술에 대한 접근도 점점 어럽다는게 느껴지기도 해서...
이렇게 뒤쳐지고 느려지는건가 하는 느낌도 받게 되네요.
간단한 GUI 프로그램이 필요한데 누구 시킬 사람은 없고
아쉬운 제가 우물 파보려고 맘 먹었으니 삽질은 좀 해보겠습니다.
저는 개발 경험이 이제 25년을 지나 30년을 향해가고 있습니다.
제가 해봤던 플랫폼만 해도 수십개는 될 겁니다.
분야도 클라이언트, 서버, 웹 등등 거의 다 해봤습니다.
나이가 들어서 체력적으로 열세가 오는 건 어쩔 수 없지만,
짬이 차면 오히려 더 쉬워져야 하는게 맞습니다.
대부분의 프로그래밍 기법들은 대동소이하기때문에
하나를 마스터하면 나머지는 다 고만고만합니다.
소프트웨어란 직업은 늘 바뀌는 일신 우일신을 다루는 직업이라고 생각합니다.
달라지는 것 같지만, 또 보면 알맹이는 다 비슷한게 묘미입니다.
한번 만들면 고정되어서 고치는 텀이 긴 하드웨어랑 다르다고 봅니다.
계속 빠르게 변화에 대응하고 바꾸는 것을 주저하지 않았던게
제가 나이먹고도 키보드 밥을 먹으면서 가족 건사한 이유인 것 같습니다.
이불을 걷어차고 나가서 키보드 앞으로 힘차게 나아가십시요 성공을 빕니다.
경력이 30년이 되어가심에도 여전히 현업이시라니
절로 존경심이 우러나고, 힘이 되는것 같습니다.
건승하십시요.
아예 요즘 트렌드를 적극 도입하겠다 하시면
electron+javascript(typescript) 조합도 있습니다만
빛을 보기전에 지칠수 있습니다.
감사합니다.
거창한 프로그램도 아니라, 간단한 개발 테스트 툴 만드는거라서...
최신 트렌드를 꼭 원한다기 보다는, MFC 같은 올드 트렌드를 다시 공부하지 않으려고
초보가 새롭게 배우기에 뭐가 좋은지 목표를 찾고 있는 상황입니다.
이번 기회에 C# 입문고 고민해 보겠습니다.
flutter 윈도우 어플리케이션은 너무 변태적일까요. 해본건 아닌데, 궁금하네요.
pysimplegui 추천 감사합니다.
파이썬도 해본적이 없어서 c# 이랑 둘중에서 선택이 필요할거 같습니다.
tkinter 추천 감사합니다.
검색해보니 쉽게 GUI 구현되는게 신기한데
혹시 tkinter 내에서 tcp socket 통신하려명 python 코딩해야 하는게 맞는거겠죠?
C#은 덩치가 좀 커보여 tkinter로 먼저 삽질해볼까 싶은 생각이 듭니다.
지금 컴퓨터를 못하는 상황이라서 tkinte. 빌드하려면 어떤 IDE 깔아야하는지부터 구글링 해보겠습니다.
구글링 해보면 파이썬 tcp socket 예제가 있을거라 믿고
이따 아이 잠들면 PC에서 tkinter 입문 해보겠습니다.
tkinter 추천 다시 한번 감사드립니다.
오늘 점심시간에 tkinter 관련해서 정보를 찾아보니 tkinter로 tcp/client 예제가 떡하니 나오더라구요.
아주 손쉽게 python으로 tcp client 띄워서 socket 연결되는 것까지 확인할 수 있었습니다.
문제는 socket connect 되지 못했을때 exception 처리가 안되서 좀 더 공부가 필요해 보이는데
일단 버튼/텍스트 오브젝트들 만들고, 배치하고 함수 액션 호출하는게 심플하게 구현가능하더라구요.
python 코드를 exe 파일로 만드는 거까지 구글링해보면 일단 원하던 tcp client 구현은 될 것 같습니다.
C#의 툴킷들은 파편화가 너무 심해져서 (윈폼, wpf, uwp, xamarin, maui), 한글로 최신의 일관 된 자료를 찾는게 어렵습니다.
이제와서 자바스크립트/일렉트론 또는 플러터를 하시라고 하기엔 좀 배보다 배꼽이 큰게 사실인데... 뭐 앞으로 그나마 쓸만한건 이 쪽이겠죠.
아니면 프로세싱 (https://processing.org/) 같은 것도 있긴 합니다. 아두이노의 gui 버전 같은 것이라 보시면 될 듯 합니다.
위에도 언급 된 imgui 같은 immediate mode 툴킷이 현실적으로는 제일 하시기 좋으실 겁니다. 일단 직관적이고, 원하시는 정도의 기능이라면 충분히 커버될 것이라...
아 파이썬 빌드한 exe가 어디선 되고 어디선 안되고 그럴수 있는건가요?
윈도우 프로그래밍할때 dll static으로 내장 안시키면 dll 없어서 실행안되는 개념일까요?
아니면 윈10에선 되고 윈11에서는 안되는 os 차이 문제이려나요.
말씀 들으니 외부 배포가 목적인 제 상황에선 파이썬도 호환성 문제있으면 배제해야할듯 하네요.
제가 들은 안타까운 사연들이 없지 않습니다 ㄷㄷ
물론 잘 준비하면 되겠지만, 상용으로 배포할 수 있겠냐는 문의가 들어온다면 딱 부러지게 대답하기 어려운 부분이 분명 있는 것 같습니다.
그런 경우를 대비해서 Pyqt쪽은 fbs 같은게 있긴 합니다. https://build-system.fman.io/
Qt: gui외에도 필요한건 있을법한 규모. 내코드가 qt라이브러리에 종속되어버릴듯. 잘모르지만 라이선스 문제가 있을지도?
파이썬: 파이선자체는 좋은데 선택가능한 gui툴킷은 거기서거기(tk, qt, imgui, wxwidget 선택가능)
WPF/윈폼: C#은 좋은데 gui쪽이 크로스플렛폼이 아니다? 그리고 왠지 MS에 길들여져 버리면 어쩌나...
JavaFX: java를 해야한다고? 쓰는사람도 별로 없지 않나..
IMGUI: 독특한 모습, IM의 장점. 그러나 다른사람의 경험/느낌은? 한글 지원이?
WxWidget: 나름 괜찮은데 인기가 없는듯. MFC랑 유사??
플러터: 데스크탑, 웹을 한방에! 기대햇으나 손이 안감(내가 게을러서) 아직 컴포넌트 렌더링 메커니즘 이해를 못했습니다.
React: 아.. 한번해봐야 하는데, 노드가 왠지 싫다(?) 내가 웹 개발자도 아닌데 이렇게 까지?
ReactNative: 마소 제공 튜토리얼 진행하려다 툴설치 문제로 연기중...
와 처음 들어보는 용어가 가득하네요. 조언 감사합니다.
여러가지 비교 설명해주셔서 다양한 GUI 프로그래밍에 대해 알게된거 같습니다.
업무용으로 쓰려다보니 라이센스를 또 간과할수가 없는 부분이네요.
이 부분도 한번 더 고민해 보겠습니다.
추천 감사합니다.
다만 파스칼이라 너무 새로운 분야가 주저가 되네요.
네 맞습니다. 소켓 배울때 채팅 서버/클라 만들라고 하는 예제인데
console 환경에서만 구현해봐서 이걸 GUI 껍데기를 씌우려니 GUI 마법사를 쓸줄몰라서
구글링해서 예제 좀 찾아보려고 했더니 죄다 옛날 MCF 관련 코드만 보이네요.
socket 관련된 부분은 예제가 널려있어 GUI 프로그래밍 부분만 공부해보려고 합니다.
파이선은 정말 다양한 라이브러리를 활용할 수 있습니다. 뭘 상상하든 가능할 정도죠. 개발자들끼리 쓸 툴 만들기 좋습니다.
시간 되시면 c# 후 파이선 추천드려요.
추천 감사함니다.
c#을 배워야 하나 싶다가 python tkinter를 먼저 찾아봤는데
구글에서 tcp 예제하나 찾아서 제가 원하는 tcp client 툴을 반나절만에 구현할 수 있었습니다.
아직 껍데이가 이쁘진 않은데 일단 기능 동작하는걸 보이
python 먼저 입문 마치고 c#도 한번 훑어 봐보려고 합니다.
make c# program with ip address, port text input and connect, disconnect button that connect server and display log to the text box
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
namespace ServerConnectionTest
{
public partial class Form1 : Form
{
private TcpClient client;
private NetworkStream stream;
public Form1()
{
InitializeComponent();
}
private void btnConnect_Click(object sender, EventArgs e)
{
// Parse the IP address and port number from the text boxes
IPAddress ipAddress = IPAddress.Parse(txtIPAddress.Text);
int port = int.Parse(txtPort.Text);
// Create a new TcpClient and connect to the server
client = new TcpClient();
client.Connect(ipAddress, port);
// Get the network stream and set it to non-blocking mode
stream = client.GetStream();
stream.ReadTimeout = 1000;
// Display a message in the log text box
txtLog.AppendText("Connected to server.\n");
}
private void btnDisconnect_Click(object sender, EventArgs e)
{
// Close the network stream and the TcpClient
stream.Close();
client.Close();
// Display a message in the log text box
txtLog.AppendText("Disconnected from server.\n");
}
}
}
python tkinter 입문해서 TCP 채팅 예제 구글링해서 실행해보고
저한테 필요한 디자인과 기능들 modify 해보니 어느 정도 python tkinter는 감을 좀 잡게 되었습니다.
tkinter 익숙해져 보려고 응몰에서 책도 주문해 놨는데... pyqt도 어떤지 한번 찾아 보도록 하겠습니다.