?
hi,
folgenden code habe ich mir aus diversen tutorials zusammengebastelt.
die tutorials habe ich unter anderem gefunden bei:
www.c-workes.ch
www.zotteljedi.de
usw.
der erste teil ist der client. der zweite der server.
der client ruft einen string vom server ab. in diesem fall die serverzeit. man kann den code entsprechend anpassen.
die anwendung soll ein kleiner zeitserver abbilden. ich weiß es gibt ntp, aber in einem geschlossen firmen netz gehts das leider nicht.
---------------------------------------- bite here -----------------
#include <stdio.h>
#include <winsock.h>
#include <time.h>
#include <windows.h>
#define PORT 54321
#define BUFFER 1024
int main(int argc, char **argv)
{
// Argument ??
if(argc < 3)
{
printf("usage: %s <server-ip> <wait-time in seconds>\n\n", argv[0]);
printf("\texample: %s 192.168.178.1 10\n", argv[0]);
exit(0);
}
while(1)
{
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if(iResult != NO_ERROR)
{
fputs("Fehler WSAStartup\n", stdout);
exit(0);
}
else
{
fputs("WSAStartup OK\n", stdout);
}
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(m_socket == INVALID_SOCKET)
{
fputs("Fehler Socket\n", stdout);
}
else
{
fputs("Socket OK\n", stdout);
}
struct sockaddr_in client;
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr(argv[1]);
client.sin_port = htons(PORT);
if(connect(m_socket, (SOCKADDR*)&client, sizeof(client)) < 0)
{
fputs("Fehler Connect\n", stdout);
WSACleanup();
exit(0);
}
else
{
fputs("Connect OK\n", stdout);
}
char recvbuf[BUFFER] = "";
int bytesRecv = recv(m_socket, recvbuf, BUFFER, 0);
fputs(recvbuf, stdout);
char string[12];
sprintf(string, "time %s", recvbuf);
//printf("%s\n", string);
system(string);
// Aufräumen
closesocket(m_socket);
WSACleanup();
fputs("DisConnect OK\n", stdout);
printf("\nSynchronisation in %s Sekunden.\n", argv[2]);
fputs("EXIT with STRG-C\n\n", stdout);
Sleep(1000*(atol(argv[2])));
}
return 0;
}
---------------------------------------- bite here -----------------
#include <stdio.h>
#include <winsock.h>
#include <time.h>
#include <string.h>
#define PORT 54321
#define BUFFER 1024
int main(void)
{
SOCKET tempSocket;
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if(iResult != NO_ERROR)
{
fputs("Fehler WSAStartup\n", stdout);
exit(0);
}
else
{
fputs("WSAStartup OK\n", stdout);
}
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(m_socket == INVALID_SOCKET)
{
fputs("Fehler Socket\n", stdout);
}
else
{
fputs("Socket OK\n", stdout);
}
struct sockaddr_in server, client;
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(PORT);
if(bind(m_socket, (SOCKADDR*)&server, sizeof(server)) < 0)
{
fputs("Fehler Connect\n", stdout);
WSACleanup();
exit(0);
}
else
{
fputs("Connect OK\n", stdout);
}
if(listen(m_socket, 1) == SOCKET_ERROR)
{
fputs("Fehler listen\n", stdout);
WSACleanup();
exit(0);
}
else
{
fputs("listen OK\n", stdout);
}
char sendbuf[BUFFER] = "";
//int bytesSend;
while(1)
{
fputs("\nWaiting......\n", stdout);
fputs("EXIT with STRG-C\n\n", stdout);
tempSocket = SOCKET_ERROR;
while(tempSocket == SOCKET_ERROR)
{
int len = sizeof(client);
tempSocket = accept( m_socket, (struct sockaddr*)&client, &len );
}
fputs("Client connect ... ", stdout);
printf("Sende Zeit an: %s\n", inet_ntoa(client.sin_addr));
struct tm *tmnow;
time_t tnow;
time(&tnow);
tmnow = localtime(&tnow);
printf("%d.%d.%d\n", tmnow->tm_hour, tmnow->tm_min, tmnow->tm_sec);
char string[12];
sprintf(string, "%d.%d.%d\n", tmnow->tm_hour, tmnow->tm_min, tmnow->tm_sec);
send(tempSocket, string, strlen(string), 0);
closesocket(tempSocket);
fputs("Client disconnect ... \n", stdout);
}
// Aufräumen
closesocket(m_socket);
WSACleanup();
return 0;
}
---------------------------------------- bite here -----------------