TCP/ip Soket data network 
소켓 데이터 구조체 통신

 

// Client.cpp : 구현 파일입니다.
//
#pragma once
#include "stdafx.h"
#include "MFC_TCPSocket.h"
#include "Client.h"
#include "afxdialogex.h"
#include "winsock2.h"
#pragma comment (lib,"ws2_32.lib");


// Client 대화 상자입니다.

IMPLEMENT_DYNAMIC(Client, CDialog)

Client::m_cSendData m_struct;

Client::Client(CWnd* pParent /*=NULL*/)
: CDialog(IDD_D_ClientDlg, pParent)
{
m_hClient = INVALID_SOCKET;
m_hClient = NULL;
m_hcServer = NULL;


}

Client::~Client()
{
}

void Client::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT7, m_ClientEditLog);
DDX_Control(pDX, IDC_L_cState, Client_List);
}


BEGIN_MESSAGE_MAP(Client, CDialog)
ON_BN_CLICKED(IDC_B_cConnect, &Client::OnBnClickedBcconnect)
ON_BN_CLICKED(IDC_B_cSend, &Client::OnBnClickedBcsend)
ON_BN_CLICKED(IDC_B_cDisconnect, &Client::OnBnClickedBcdisconnect)
ON_BN_CLICKED(IDC_B_cClear, &Client::OnBnClickedBcclear)
ON_BN_CLICKED(IDC_B_cLogreset, &Client::OnBnClickedBclogreset)
ON_BN_CLICKED(IDC_B_cClientClear, &Client::OnBnClickedBcclientclear)
ON_BN_CLICKED(IDC_B_cStateClear, &Client::OnBnClickedBcstateclear)
ON_WM_DESTROY()
END_MESSAGE_MAP()


// Client 메시지 처리기입니다.


void Client::OnBnClickedBcconnect()
{
//ip,port 값 받고 시작 
  GetDlgItemText(IDC_E_cOneN, m_icOneN);
GetDlgItemText(IDC_E_cTwoN, m_icTwoN);
  GetDlgItemText(IDC_E_cThreeN, m_icThreeN);
  GetDlgItemText(IDC_E_cFourN, m_icfourN);

if (m_hClient == NULL)
{
OpenClientSocket();
}
else
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[동작중입니다.문제가 있다면 Disconnect 후 사용해주시기 바랍니다.] \r\n");
}

}


void Client::OnBnClickedBcsend()
{
Client_List.ResetContent();
// 값을 받아오고 시작 
GetSendData();

ClientSend();
//서버한테 보내주고 내 state 에 정보 뿌려줌 
Client_List.InsertString(0, L"Model Name");
Client_List.InsertString(1, m_cscModel);
Client_List.InsertString(2, L"Location");
Client_List.InsertString(3, m_cscLocation);
Client_List.InsertString(4, L"X_Axis");
Client_List.InsertString(5, m_cscXaxis);
Client_List.InsertString(6, L"Y_Axis");
Client_List.InsertString(7, m_cscYaxis);
Client_List.InsertString(8, L"Voltage");
Client_List.InsertString(9, m_cscVoltage);
Client_List.InsertString(10, L"Current");
Client_List.InsertString(11, m_cscCurrent);
}


void Client::GetSendData()
{
// edit 의 CString 형 data 저장 .
GetDlgItemText(IDC_E_cModelName, m_cscModel);
GetDlgItemText(IDC_E_cLocation, m_cscLocation);
GetDlgItemText(IDC_E_cXaxis, m_cscXaxis);
GetDlgItemText(IDC_E_cYaxis, m_cscYaxis);
GetDlgItemText(IDC_E_cVoltage, m_cscVoltage);
GetDlgItemText(IDC_E_cCurrent, m_cscCurrent);
}


void Client::OpenClientSocket()
{
WSADATA data;
WSAStartup(0x0202, &data);  //소켓통신을 하기위해 필요한 start 문 정확한 자료는 따로 찾아봐야함.

GetDlgItemText(IDC_E_cPortN, m_icPortN);
u_short uscPortN = NULL;
uscPortN = (u_short)_wtof(m_icPortN);

if (m_icPortN == "")
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[Port에 값을 넣어주세요] \r\n");
return;
}

m_hClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 소켓 생성 

//내 주소 127.0.0.1   
//주소 받아와서 Cstring to char* 변환.
CString csFullAddr = m_icOneN + L"." + m_icTwoN + L"." + m_icThreeN + L"." + m_icfourN;
CStringA csAFullAddr = CStringA(csFullAddr);
const char* cFullAddr = csAFullAddr;
char* cpFullAddr = const_cast<char*>(cFullAddr);



tClientSocket = {0};
ZeroMemory(&tClientSocket, sizeof(tClientSocket));
tClientSocket.sin_family = AF_INET;
tClientSocket.sin_port = htons(uscPortN);
tClientSocket.sin_addr.s_addr = inet_addr(cpFullAddr); //htons(INADDR_ANY);//inet_addr("IP Num");

if (m_hClient == INVALID_SOCKET)
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[소캣이 생성되지 않았습니다. \r\n");
return;
}
else
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[소캣 생성 완료] \r\n");

if (m_hcServer = connect(m_hClient, (struct sockaddr*)&tClientSocket, sizeof(tClientSocket)) == SOCKET_ERROR)
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[연결 실패] \r\n");
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[IP 나 Port 번호를 다시 확인해주세요 ] \r\n");
if (SOCKET_ERROR == WSAEINTR)
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[WSACancelBlockingCall(Wsapiref_704y.asp) 호출로 인해 차단 작업이 중단되었습니다.] \r\n");
closesocket(m_hClient);
}
else if (SOCKET_ERROR == -1)
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[-1 err 타임에러 발생  ] \r\n");
closesocket(m_hClient);
}



return;
}
else
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[연결 성공 \r\n 이제부터 데이터를 보낼수있습니다.] \r\n");







}
return;
}


m_ClientEditLog.LineScroll(m_ClientEditLog.GetLineCount(), 0); //자동으로 스크롤 되도록 
}

void Client::OnBnClickedBcdisconnect()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

WSACleanup();
m_hClient = NULL;
SOCKET(NULL);
closesocket(m_hcServer);
closesocket(m_hClient);
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[클라이언트가 종료되었습니다..] \r\n");
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[바인드 초기화중이니 잠시후 다시 시도해주세요] \r\n");
}


void Client::OnDestroy()
{
CDialog::OnDestroy();
WSACleanup();

// TODO: 여기에 메시지 처리기 코드를 추가합니다.
}


void Client::OnBnClickedBcclear()
{
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[현재의 모든기록과 데이터를 Client 상에서 clear합니다.] \r\n");

m_cscModel.Empty();
m_cscLocation.Empty();
m_cscXaxis.Empty();
m_cscYaxis.Empty();
m_cscVoltage.Empty();
m_cscCurrent.Empty();

SetDlgItemText(IDC_E_cModelName, NULL);
SetDlgItemText(IDC_E_cLocation, NULL);
SetDlgItemText(IDC_E_cXaxis, NULL);
SetDlgItemText(IDC_E_cYaxis, NULL);
SetDlgItemText(IDC_E_cVoltage, NULL);
SetDlgItemText(IDC_E_cCurrent, NULL);
}


void Client::OnBnClickedBclogreset()
{
SetDlgItemText(IDC_E_cLogEdit, NULL);
}


void Client::OnBnClickedBcclientclear()
{
SetDlgItemText(IDC_E_cOneN, NULL);
SetDlgItemText(IDC_E_cTwoN, NULL);
SetDlgItemText(IDC_E_cThreeN, NULL);
SetDlgItemText(IDC_E_cFourN, NULL);
SetDlgItemText(IDC_E_cPortN, NULL);
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[IP,PORT 정보 클리어 ] \r\n");

}


void Client::OnBnClickedBcstateclear()
{
Client_List.ResetContent();
m_ClientEditLog.SetSel(-1, -1);
m_ClientEditLog.ReplaceSel(L"[State 정보 클리어 ] \r\n");
}

void Client::ClientSend()
{


GetSendData(); //데이터 받아오고 
m_struct.cModel    = m_cscModel;
m_struct.cLocation  = m_cscLocation;
m_struct.cXaxis     = m_cscXaxis;
m_struct.cYaxis     = m_cscYaxis;
m_struct.cVoltage   = m_cscVoltage;
m_struct.cCurrent   = m_cscCurrent;



send(m_hClient, (char*)&m_struct, sizeof(m_struct), 0); //위 내용을 보낸다 Send

}

*이 게시글에 문제가 있을시  신고보단 지적을 먼저 부탁드립니다. 빠른시간안으로  수정하겠습니다. 감사합니다
제글을  재밌게 봐주셨다면  ♥(공감)한번씩 눌러주시면 감사합니다 좋은하루 되세요!


TCP/ip Soket data network 
소켓 데이터 구조체 통신 

 

#pragma once
#include "afxwin.h"


// Client 대화 상자입니다.

class Client : public CDialog
{
DECLARE_DYNAMIC(Client)

public:
Client(CWnd* pParent = NULL);   // 표준 생성자입니다.
virtual ~Client();

// 대화 상자 데이터입니다.
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_D_ClientDlg };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.
afx_msg void OnBnClickedBcconnect();
afx_msg void OnBnClickedBcsend();
afx_msg void OnBnClickedBcdisconnect();
afx_msg void OnDestroy();
afx_msg void OnBnClickedBcclear();
afx_msg void OnBnClickedBclogreset();
afx_msg void OnBnClickedBcclientclear();
afx_msg void OnBnClickedBcstateclear();
CListBox Client_List;
CEdit m_ClientEditLog;
DECLARE_MESSAGE_MAP()

private:
void GetSendData();
void OpenClientSocket();
void ClientSend();
void CloseClient();
// void SendMsg();



public:
CString m_icOneN;
CString m_icTwoN;
CString m_icThreeN;
CString m_icfourN;
CString m_icPortN;

CString m_cscModel;
CString m_cscLocation;
CString m_cscXaxis;
CString m_cscYaxis;
CString m_cscVoltage;
CString m_cscCurrent;

SOCKET m_hClient;
SOCKET m_hcServer;
SOCKADDR_IN tClientSocket;

/*struct m_cSendData;*/

struct m_cSendData
{
CString cModel = 0;
CString cLocation = 0;
CString cXaxis = 0;
CString cYaxis = 0;
CString cVoltage = 0;
CString cCurrent = 0;

};



};


*이 게시글에 문제가 있을시  신고보단 지적을 먼저 부탁드립니다. 빠른시간안으로  수정하겠습니다. 감사합니다
제글을  재밌게 봐주셨다면  ♥(공감)한번씩 눌러주시면 감사합니다 좋은하루 되세요!

TCP/ip Soket data network 

소켓 데이터 구조체 통신 

// ServerDlg.cpp : 구현 파일입니다.
//

#include "stdafx.h"
#include "MFC_TCPSocket.h"
#include "ServerDlg.h"
#include "afxdialogex.h"
#include "winsock2.h"
#pragma comment (lib,"ws2_32.lib");


// ServerDlg 대화 상자입니다.

IMPLEMENT_DYNAMIC(ServerDlg, CDialog)




ServerDlg::ServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_D_ServerDlg, pParent)
{
//m_ListenServer = INVALID_SOCKET; // 소켓 초기화 
m_clientdlg = nullptr;
hServer  = INVALID_SOCKET;
hServer  = NULL;
hClient  = NULL;
m_hWaitAccept  = NULL;
m_evhWaitAccServer  = NULL;
m_sRecvData  = NULL;
m_hRecvS  = NULL;
m_evhRecvS  = NULL;
m_evhWaitAccServer  = CreateEvent(NULL, FALSE, FALSE, NULL);
m_evhRecvS = CreateEvent(NULL, FALSE, FALSE, NULL);
m_iClientLen        = 0;
m_iSaveData = 1;
ResetEvent(m_evhWaitAccServer);
ResetEvent(m_hWaitAccept);
ResetEvent(m_evhRecvS);
ResetEvent(m_hRecvS);

}

ServerDlg::~ServerDlg()
{
}

void ServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_E_sLogEdit, ServerEditLog);
DDX_Control(pDX, IDC_L_sLoadSave, m_ServerSDL);
DDX_Control(pDX, IDC_L_sLoad, m_ServerCDL);

}


BEGIN_MESSAGE_MAP(ServerDlg, CDialog)
ON_BN_CLICKED(IDC_B_sConnecter, &ServerDlg::OnBnClickedBsconnecter)
ON_BN_CLICKED(IDC_B_sDisconnecter, &ServerDlg::OnBnClickedBsdisconnecter)
ON_BN_CLICKED(IDC_B_sLogreset, &ServerDlg::OnBnClickedBslogreset)
ON_BN_CLICKED(IDC_B_sClear, &ServerDlg::OnBnClickedBsclear)
ON_BN_CLICKED(IDC_B_sLoadClear, &ServerDlg::OnBnClickedBsloadclear)
ON_BN_CLICKED(IDC_B_sDataClear, &ServerDlg::OnBnClickedBsdataclear)
ON_BN_CLICKED(IDC_B_sLoad, &ServerDlg::OnBnClickedBsload)
ON_WM_DESTROY()
END_MESSAGE_MAP()


// ServerDlg 메시지 처리기입니다.


void ServerDlg::OnBnClickedBsconnecter()
{

if (hServer == NULL)
{
//소켓 생성 해준다 
OpenSocket();
//그리고 다른송신 대기 시작.
}
else
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[동작중입니다.문제가 있다면 Disconnect 후 사용해주시기 바랍니다.] \r\n");
}
}
void ServerDlg::OpenSocket()
{
WSADATA data;
WSAStartup(0x0202, &data);

int iSzClient = 0 ;

//ip,port 값 받고 시작 
GetDlgItemText(IDC_E_sOneN, m_isOneN);
GetDlgItemText(IDC_E_sTwoN, m_isTwoN);
GetDlgItemText(IDC_E_sThreeN, m_isThreeN);
GetDlgItemText(IDC_E_sFourN, m_isfourN);
GetDlgItemText(IDC_E_sPortN, m_isPortN);

  CString IPNUM = m_isOneN + L"." + m_isTwoN + L"." + m_isThreeN + L"." + m_isfourN;
CStringA aIpnum = CStringA(IPNUM);
const char* ccIpNum = aIpnum;
char* cpIpNum = const_cast<char*>(ccIpNum);

//포트 변환 
u_short usPortN = NULL;
usPortN = (u_short)_wtof(m_isPortN);

// 소켓 생성 
if (m_isPortN == "")
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[Port에 값을 넣어주세요] \r\n");
return;
}

hServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

tServerSocket = {0};
ZeroMemory(&tServerSocket, sizeof(tServerSocket)); //메모리 비우기
tServerSocket.sin_family = AF_INET;
tServerSocket.sin_port = htons(usPortN);
tServerSocket.sin_addr.s_addr = (htons(INADDR_ANY)); //INADDR_ANY 현재의 내 IP 주소로 설정 
//192.168.10.96?

if (hServer == INVALID_SOCKET) {

ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[소캣이 생성되지 않았습니다. \r\n");

return;
}
else
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[소캣 생성 완료] \r\n");

if (bind(hServer, (struct sockaddr*)&tServerSocket, sizeof(tServerSocket)) == SOCKET_ERROR)
{//주소할당이 제대로 되었는지 
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[바인딩 실패 하였습니다.] \r\n");
return;
}
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[클라이언트를 기다립니다.] \r\n");

ResetEvent(m_evhWaitAccServer);
m_hWaitAccept = (HANDLE)_beginthreadex(NULL, 0, _m_WaitAccept, this, 0, NULL);
if (hClient == INVALID_SOCKET)
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[신호를 받지 못했습니다. 다시연결해주시기 바랍니다.] \r\n");
return;
}
else
{
//Thread Create
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[신호가 연결되었습니다.] \r\n");
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[Data를 받을준비를 합니다.] \r\n");

ResetEvent(m_evhRecvS);
m_hRecvS = (HANDLE)_beginthreadex(NULL, 0, _m_sRecvThread, this, 0, NULL);
}
}
return;
ServerEditLog.LineScroll(ServerEditLog.GetLineCount(), 0);
}

unsigned ServerDlg::m_WaitAccept()
{
int iSzClient = 0;
iSzClient = sizeof(m_siClientSocket);

while (WaitForSingleObject(m_evhWaitAccServer, 100) == WAIT_TIMEOUT)
{
if (hServer == SOCKET_ERROR)
{//소켓 에러시 .
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[잃어들이기에 실패 하였습니다.] \r\n");
}
else
{  

if (listen(hServer, SOMAXCONN) == SOCKET_ERROR)
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[잃어들이기에 실패 하였습니다.] \r\n");

}
else
{
hClient = accept(hServer, (SOCKADDR*)&m_siClientSocket, &iSzClient);

}
}


}
return 0;


}
void ServerDlg::compareMS()
{
if (m_sModel == m_sSubModel) // 두개의 값들이 들어가있나 확인 .
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Model Success==] \r\n");
if (m_sLocation == m_sSubLocation)
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Location Success==] \r\n");

if (m_sXaxis == m_sSubXaxis)
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Xaxis Success==] \r\n");
if (m_sYaxis == m_sSubYaxis)
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Yaxis Success==] \r\n");
if (m_sVoltage == m_sSubVoltage)
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Voltage Success==] \r\n");
if (m_sCurrent == m_sSubCurrent)
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Current Success==] \r\n");
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==All Success==] \r\n");
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Wait Data ==] \r\n");
Sleep(700);
ServerEditLog.SetSel(0, -1);
ServerEditLog.ReplaceSel(L"[==Data Success==] \r\n");

}
else
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Current Fail==] \r\n");
}
}
else
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Voltage Fail==] \r\n");
}
}
else
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Yaxis Fail==] \r\n");
}
}
else 
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Xaxis Fail==] \r\n");
}
}
else
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Location Fail==] \r\n");
}
}
else
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[==Model Fail==] \r\n");
}


}

unsigned ServerDlg::m_sRecvThread()  //리시브 스레드.
{

while (WaitForSingleObject(m_evhRecvS, 100) == WAIT_TIMEOUT) //100마다 땅땅 체크 
{

while ((m_iClientLen = recv(hClient, (char*)&m_struct, sizeof(m_struct)*2, 0)) != 0)
{
if (hClient == NULL)
{
send(hClient, m_sRecvData, m_iClientLen, 0); //recv 값을 받았다고 클라이언트 에게 다시 알려줌 .
Sleep(1000);
if (m_sRecvData == NULL)
{//데이터 로딩중에 데이터 받으면 연결확인문 띄우기 


Sleep(300);
ServerEditLog.SetSel(0, -1);
ServerEditLog.ReplaceSel(L"[Data 로딩중입니다.] \r\n");
}
}
else
{

ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[Data를 성공적으로 받았습니다.] \r\n");
//데이터 받고나서 저장하고 저장되는대로 데이터 저장칸 날리고
//저장 
C_DataSave();

if (m_iSaveData == 1)//첫번째 꺼는 Main 이되고 
{
C_DataLoad();
}
else // 두번째 꺼는 Sub 가 된다 . (차후 위내용과 아래내용일 일치하는지 봐야함)
{
C_DataSubLoad();
//두번째 값 받고나서는 꼭 비교 해볼것.
compareMS();




}

// 이제 기존데이터 따로 저장했으니 새로저장할곳을 만들고 
// 통신포트에서 대기중으로 다시 돌아와야한다.
}
}

}


return 0; 
}

// 통신 이후 Data 수신 후 송신 두개의 Part를 만들어줘야함 
//받아온 Data 를 저장해주어야하며 
//비교해주는 문도 만들고 그값 리턴 필요 





void ServerDlg::OnDestroy()
{
CDialog::OnDestroy();

//  //소켓통신을 다썻다면 닫아주는 작업을 해준다 
//  //다이얼로그의 윈도우가 파게될떄 선언
  WSACleanup();
}

void ServerDlg::OnBnClickedBsdisconnecter()  //커넥트 해제 . 
{
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[클라이언트가  종료되었습니다..] \r\n");
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[바인드 초기화중이니 잠시후 다시 시도해주세요] \r\n");
hServer  = NULL;
m_hWaitSocket  = NULL;
m_hWaitAccept  = NULL;
m_evhWaitAccServer  = NULL;
m_hRecvS  = NULL;
m_evhRecvS  = NULL;
SetEvent(m_evhWaitAccServer);
SetEvent(m_hRecvS);
closesocket(hClient);
closesocket(hServer);
closesocket(m_hWaitSocket);
SOCKET(NULL);
WSACleanup();

}


void ServerDlg::OnBnClickedBslogreset()
{
SetDlgItemText(IDC_E_sLogEdit, NULL);
}


void ServerDlg::OnBnClickedBsclear()
{

SetDlgItemText(IDC_E_sOneN, NULL);
SetDlgItemText(IDC_E_sTwoN, NULL);
SetDlgItemText(IDC_E_sThreeN, NULL);
SetDlgItemText(IDC_E_sFourN, NULL);
SetDlgItemText(IDC_E_sPortN, NULL);
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[IP,PORT 정보 클리어 ] \r\n");
}


void ServerDlg::OnBnClickedBsloadclear()
{
m_ServerSDL.ResetContent();
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[SaveList 정보 클리어 ] \r\n");
m_iSaveData = 1;

}


void ServerDlg::OnBnClickedBsdataclear()
{
m_ServerCDL.ResetContent();
ServerEditLog.SetSel(-1, -1);
ServerEditLog.ReplaceSel(L"[CallList 정보 클리어 ] \r\n");
}
void ServerDlg::C_DataSave()  //받아온 데이터 저장 
{
if (m_iSaveData == 1)
{
m_sModel = m_struct.cModel;
m_sLocation = m_struct.cLocation;
m_sXaxis = m_struct.cXaxis;
m_sYaxis = m_struct.cYaxis;
m_sVoltage = m_struct.cVoltage;
m_sCurrent = m_struct.cCurrent;
}
else
{
m_sSubModel = m_struct.cModel;
m_sSubLocation = m_struct.cLocation;
m_sSubXaxis = m_struct.cXaxis;
m_sSubYaxis = m_struct.cYaxis;
m_sSubVoltage = m_struct.cVoltage;
m_sSubCurrent = m_struct.cCurrent;
}

}

void ServerDlg::C_DataLoad()  //값 띄우기 메인값.
{
m_ServerSDL.InsertString(0, L"Model Name");
m_ServerSDL.InsertString(1, m_sModel);
m_ServerSDL.InsertString(2, L"Location");
m_ServerSDL.InsertString(3, m_sLocation);
m_ServerSDL.InsertString(4, L"X_Axis");
m_ServerSDL.InsertString(5, m_sXaxis);
m_ServerSDL.InsertString(6, L"Y_Axis");
m_ServerSDL.InsertString(7, m_sYaxis);
m_ServerSDL.InsertString(8, L"Voltage");
m_ServerSDL.InsertString(9, m_sVoltage);
m_ServerSDL.InsertString(10, L"Current");
m_ServerSDL.InsertString(11, m_sCurrent);
m_iSaveData = 2;
}

void ServerDlg::C_DataSubLoad() //Sub 값 띄우기 
{
m_ServerCDL.InsertString(0, L"Model Name");
m_ServerCDL.InsertString(1, m_sSubModel);
m_ServerCDL.InsertString(2, L"Location");
m_ServerCDL.InsertString(3, m_sSubLocation);
m_ServerCDL.InsertString(4, L"X_Axis");
m_ServerCDL.InsertString(5, m_sSubXaxis);
m_ServerCDL.InsertString(6, L"Y_Axis");
m_ServerCDL.InsertString(7, m_sSubYaxis);
m_ServerCDL.InsertString(8, L"Voltage");
m_ServerCDL.InsertString(9, m_sSubVoltage);
m_ServerCDL.InsertString(10, L"Current");
m_ServerCDL.InsertString(11, m_sSubCurrent);
}


void ServerDlg::OnBnClickedBsload()  //기존값 불러오기 .
{
m_ServerSDL.InsertString(0,  L"Model Name");
m_ServerSDL.InsertString(1, m_sModel);
m_ServerSDL.InsertString(2, L"Location");
m_ServerSDL.InsertString(3, m_sLocation);
m_ServerSDL.InsertString(4, L"X_Axis");
m_ServerSDL.InsertString(5, m_sXaxis);
m_ServerSDL.InsertString(6, L"Y_Axis");
m_ServerSDL.InsertString(7, m_sYaxis);
m_ServerSDL.InsertString(8, L"Voltage");
m_ServerSDL.InsertString(9, m_sVoltage);
m_ServerSDL.InsertString(10, L"Current");
m_ServerSDL.InsertString(11, m_sCurrent);
}



 *이 게시글에 문제가 있을시  신고보단 지적을 먼저 부탁드립니다. 빠른시간안으로  수정하겠습니다. 감사합니다

제글을  재밌게 봐주셨다면  ♥(공감)한번씩 눌러주시면 감사합니다 좋은하루 되세요!

 

** 완벽하진 않습니다만 기능만 보면 동작은 매끄럽게 됨으로 필요하신부분들만 보시길바랍니다.

TCP/ip Soket data network 

소켓 데이터 구조체 통신 

 

 

#pragma once
#include "afxwin.h"
#include "Client.h"

// ServerDlg 대화 상자입니다.

class ServerDlg : public CDialog
{
DECLARE_DYNAMIC(ServerDlg)

public:
ServerDlg(CWnd* pParent = NULL);   // 표준 생성자입니다.
virtual ~ServerDlg();
Client *m_clientdlg;

// 대화 상자 데이터입니다.
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_D_ServerDlg };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.
afx_msg void OnBnClickedBsconnecter();
afx_msg void OnDestroy();
afx_msg void OnBnClickedBsdisconnecter();
afx_msg void OnBnClickedBslogreset();
afx_msg void OnBnClickedBsclear();
afx_msg void OnBnClickedBsloadclear();
afx_msg void OnBnClickedBsdataclear();
afx_msg void OnBnClickedBsload();
CListBox m_ServerSDL;
CListBox m_ServerCDL;
CListBox m_ServerUDL;
CEdit ServerEditLog;
DECLARE_MESSAGE_MAP()


private:


void OpenSocket();
void OpenServer();
void CloseServer();
void C_DataLoad();
void C_DataSubLoad();
void C_DataSave();
void compareMS();


HANDLE m_hWaitAccept;
HANDLE m_evhWaitAccServer;
HANDLE m_hRecvS;
HANDLE m_evhRecvS;

unsigned m_WaitAccept();   //쓰레드 구체적인 선언 부분인데 조사필요 
static unsigned __stdcall _m_WaitAccept(void *p)
{
return ((ServerDlg*)p)->m_WaitAccept();
}

unsigned m_sRecvThread();   //쓰레드 구체적인 선언 부분인데 조사필요 
static unsigned __stdcall _m_sRecvThread(void *p)
{
return ((ServerDlg*)p)->m_sRecvThread();
}


public:
CString m_isOneN;
CString m_isTwoN;
CString m_isThreeN;
CString m_isfourN;
CString m_isPortN;

CString m_sModel;
CString m_sLocation;
CString m_sXaxis;
CString m_sYaxis;
CString m_sVoltage;
CString m_sCurrent;
CString m_Test;

//sub 
CString m_sSubModel;
CString m_sSubLocation;
CString m_sSubXaxis;
CString m_sSubYaxis;
CString m_sSubVoltage;
CString m_sSubCurrent;

CString as;

SOCKET hServer;
SOCKET m_hWaitSocket;
SOCKET hClient;
// SOCKET m_ListenServer;
SOCKADDR_IN tServerSocket; //기본 값 받을곳 
SOCKADDR_IN m_siClientSocket; //기본 값 받을곳 
SOCKADDR_IN m_soServerAPSK;  // accept 받을곳

 char *m_sRecvData;
 int m_iClientLen;
 int m_iSaveData;

/* struct m_cSendData;*/

 struct m_cSendData
 {
 CString cModel = 0;
 CString cLocation = 0;
 CString cXaxis = 0;
 CString cYaxis = 0;
 CString cVoltage = 0;
 CString cCurrent = 0;

 };

 m_cSendData m_struct;

};


*이 게시글에 문제가 있을시  신고보단 지적을 먼저 부탁드립니다. 빠른시간안으로  수정하겠습니다. 감사합니다
제글을  재밌게 봐주셨다면  ♥(공감)한번씩 눌러주시면 감사합니다 좋은하루 되세요!

+ Recent posts