Napisałem sobie prosty program klient-serwer i mam problem, bo nawet jak klient nie wyśle wiadomości to serwer to odbiera i wyświetla pusty komunikat. Linijkę, która mi nie działa zaznaczyłem komentarzem (w kodzie serwera).
KLIENT:
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
int main(int argc, char *argv[])
{
WSADATA wsadata;
struct hostent *server;
SOCKET client;
SOCKADDR_IN address;
WSAStartup(MAKEWORD(2,2), &wsadata);
client = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
char *ipaddress, *message;
if(argc != 2)
{
printf("usage: client <ip_address>");
return 0;
}
ipaddress = argv[1];
int PORT = 44777;
address.sin_family = AF_INET;
address.sin_port = htons(PORT);
address.sin_addr.s_addr = inet_addr(ipaddress);
connect(client, (struct sockaddr*)&address, sizeof(address));
while(1)
{
scanf("> %s", &message);
send(client, message, sizeof(message), 0);
Sleep(10);
}
system("PAUSE>NUL");
return 0;
}
SERWER:
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
int main(int argc, char *argv[])
{
WSADATA wsadata;
SOCKET client, _listen;
SOCKADDR_IN address, client_address;
char *text;
char message[512];
WSAStartup(MAKEWORD(2,2), &wsadata);
_listen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
int PORT = 44777;
int address_length;
int i;
address.sin_family = AF_INET;
address.sin_port = htons(PORT);
address.sin_addr.s_addr = htonl(INADDR_ANY);
bind(_listen, (struct sockaddr*)&address, sizeof(address));
listen(_listen, 10);
address_length = sizeof(client_address);
client = accept(_listen, (struct sockaddr*)&client_address, &address_length);
while(1)
{
for(i = 0 ; i < sizeof(message) ; i++)
{
char c[1] = "";
message[i] = c[0];
}
recv(client, message, sizeof(message), 0);
text = message;
if(text != "") //to porównanie nie działa
MessageBox(0, message, "wiadomosc od klienta", MB_ICONERROR);
}
closesocket(client);
WSACleanup();
system("PAUSE>NUL");
return 0;
}