dadevelopa
Mitglied
Hallo zusammen.
Ich habe ein kleines Programm geschrieben, welches unter Windows über einen Socket eine Nachricht versendet.
Das Problem ist nun, dass jedesmal, wenn die Funktion für das Senden aufgerufen wird, der vom Programm verwendete Speicher um 8 oder 12 KB steigt. Das ist so natürlich nicht akzeptabel.
Ich werde hier einmal den Code posten und ich hoffe, ihr könnt mir helfen.
Dies ist die Funktion, welche den Fehler zu verursachen scheint:
Auf Port 13 läuft ein Server der die Nachrichten entgegennimmt und Ausgibt.
Vielen Dank, schon im voraus.
Ich habe ein kleines Programm geschrieben, welches unter Windows über einen Socket eine Nachricht versendet.
Das Problem ist nun, dass jedesmal, wenn die Funktion für das Senden aufgerufen wird, der vom Programm verwendete Speicher um 8 oder 12 KB steigt. Das ist so natürlich nicht akzeptabel.
Ich werde hier einmal den Code posten und ich hoffe, ihr könnt mir helfen.
Dies ist die Funktion, welche den Fehler zu verursachen scheint:
Code:
#include "stdafx.h"
#define NETWORK_ERROR -1
#define NETWORK_OK 0
void ReportError(int errorCode, const char *whichFunc);
char buffer[256]; //Buffer for the message
char errorMsg[92]; //Buffer for the errorMessage
WORD sockVersion;
WSADATA wsaData;
LPHOSTENT hostEntry;
SOCKET theSocket;
SOCKADDR_IN serverInfo;
int nret;
int connectToServer(void) {
sockVersion = MAKEWORD(1, 1);
// Initialize Winsock as before
WSAStartup(sockVersion, &wsaData);
hostEntry = gethostbyname("127.0.0.1"); // Specifying the server by its name;
if (!hostEntry) {
nret = WSAGetLastError();
ReportError(nret, "gethostbyname()"); // Report the error
WSACleanup();
return NETWORK_ERROR;
}
//initialize the socket
theSocket = socket(AF_INET,
SOCK_STREAM,
IPPROTO_TCP);
if (theSocket == INVALID_SOCKET) {
nret = WSAGetLastError();
ReportError(nret, "socket()");
WSACleanup();
return NETWORK_ERROR;
}
serverInfo.sin_family = AF_INET;
serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
serverInfo.sin_port = htons(13);
// Connect to the server
nret = connect(theSocket,
(LPSOCKADDR)&serverInfo,
sizeof(struct sockaddr));
if (nret == SOCKET_ERROR) {
nret = WSAGetLastError();
ReportError(nret, "connect()");
closesocket(theSocket);
WSACleanup();
return NETWORK_ERROR;
}
ZeroMemory(buffer, 256);
wsprintf(buffer, "A Message");
//Send data
nret = send(theSocket,
buffer,
strlen(buffer),
0);
if (nret == SOCKET_ERROR) {
return NETWORK_ERROR;
}
// cleanup:
int test = closesocket(theSocket);
if(test != 0){
ReportError(test, "closesocket()");
}
WSACleanup();
return 0;
}
void ReportError(int errorCode, const char *whichFunc) {
ZeroMemory(errorMsg, 92); // Automatically NULL-terminate the string
// The following line copies the phrase, whichFunc string, and integer errorCode into the buffer
sprintf(errorMsg, "Call to %s returned error %d!", (char *)whichFunc, errorCode);
MessageBox(NULL, errorMsg, "NetworkError", MB_OK);
}
Auf Port 13 läuft ein Server der die Nachrichten entgegennimmt und Ausgibt.
Vielen Dank, schon im voraus.