J
Hallo,
hab' nun auch mit UDP hinbekommen...
void CServerDlg::OnButtonListen()
{
// Variablen mit Steuerelementen synchronisieren
UpdateData(TRUE);
// Steuerelemente deaktivieren
GetDlgItem(IDC_RADIO_TCP)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_UDP)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_PORTNUMBER)->EnableWindow(FALSE);
GetDlgItem(IDC_SPIN_PORTINC)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_LISTEN)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_EXIT)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_ABOUT)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);
// wurde TCP oder UDP ausgewählt?
if (m_iSocketType == 0)
{
/**
* TCP
*/
// Socket erzeugen
m_sListenSocket.Create(m_iPortnumber, SOCK_STREAM);
// auf Verbindungsanfragen warten
m_sListenSocket.Listen();
}
else
{
/**
* UDP
*/
// Socket erzeugen
m_sListenSocket.Create(m_iPortnumber, SOCK_DGRAM);
struct sockaddr_in addr;
// zuerst alles auf 0 setzen
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addr.sin_port = htons(m_iPortnumber);
// Socket binden
m_sListenSocket.Bind((struct sockaddr*)&addr, sizeof(addr));
}
}
Noch ganz wichtig, die Funktion OnReceive():
void CServerDlg::OnReceive()
{
char *pBuf = new char[1025];
int iBufSize = 1024;
CString strRcvd;
int iRcvd, iSent;
// wurde TCP oder UDP ausgewählt?
if (m_iSocketType == 0)
{
/**
* TCP
*/
int iLen;
// Nachricht empfangen
iRcvd = m_sConnectSocket.Receive(pBuf, iBufSize);
// Wurde etwas empfangen?
if(iRcvd == SOCKET_ERROR)
{
}
else
{
// Ende der Nachricht abschneiden
pBuf[iRcvd] = NULL;
// Nachricht in einen CString kopieren
strRcvd = pBuf;
iLen = strRcvd.GetLength();
// Nachricht senden
iSent = m_sConnectSocket.Send(LPCTSTR(strRcvd), iLen);
}
}
else
{
/**
* UDP
*/
int laddr;
struct sockaddr_in addr;
struct sockaddr *paddr;
// zuerst alles auf 0 setzen
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addr.sin_port = htons(m_iPortnumber);
paddr = (struct sockaddr*)&addr;
laddr = sizeof(addr);
// Empfangen... --> recvfrom
iRcvd = m_sListenSocket.ReceiveFrom(pBuf, iBufSize, paddr, &laddr);
// Wurde etwas empfangen?
if(iRcvd == SOCKET_ERROR)
{
}
else
{
// Ende der Nachricht abschneiden
pBuf[iRcvd] = NULL;
// Senden... --> sendto
iSent = m_sListenSocket.SendTo(pBuf, iBufSize, paddr, sizeof(addr));
}
}
}