Здравствуйте, написал сервер и клиент! Эхо сервер! Но данные на клиет от сервера приходят "ироглифами" Как быть?
клиетн:
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[])
{
int sock;
int send_s;
int recv_s;
struct sockaddr_in saddr;
struct hostent *host;
char message[] = "Hello there!\n";
char buf[sizeof(message)];
char in [1024];
char out [1024];
if(argc != 2)
{
cout << "НЕПРАВИЛЬНО!!! ТАК ПРАВИЛЬНО: a.out <IP адрес>" << endl;
return 0;
}
if((host = gethostbyname(argv[1])) == NULL)
{
cout << "nslookup failed on '%s'\n" << argv[1] << endl;
return 0;
}
else
{
cout << "Соединение с " << argv[1] << endl;
}
sock = socket(PF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
cout << "Ошибка сокета" << endl;
return 0;
}
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6575); // или любой другой порт...
// saddr.sin_addr.s_addr = inet_aton;
if(inet_aton(argv[1], &saddr.sin_addr) == 0)
{
cout << "Не правильный IP адрес" << endl;
close(sock);
return 0;
}
if(connect(sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
{
cout << "Connect Error" << endl;
return 0;
}
//while (1)
//{
//recv_s = recv (sock, in, 1024, 0);
//if (recv_s == -1)
//{
//cout << "Ошибка приёма" << endl;
//return 0;
//}
//if (recv_s > 0)
//{
//cout << in;
//}
//cin >> out;
//send (sock, out, 1024, 0);
//free(out);
//free(in);
//}
send(sock, message, sizeof(message), 0);
recv(sock, buf, sizeof(message), 0);
cout << buf << endl;
close(sock);
return 0;
}
сервер:
#include <sys/types.h>
#include <sys/socket.h>
#include <iostream>
#include <netinet/in.h>
using namespace std;
int main (void)
{
int sock;
int send_s;
int recv_s;
char buf[1024];
int bytes_read;
char in [1024];
char out [1024];
char hello[] = "hello client!";
struct sockaddr_in saddr;
sock = socket (PF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
cout << "Ошибка сокета" << endl;
return 0;
}
saddr.sin_family = AF_INET;
saddr.sin_port = htons (6575);
saddr.sin_addr.s_addr = htonl (INADDR_ANY);
if (bind (sock, (struct sockaddr*)&saddr, sizeof(saddr)) < 0)
{
cout << "Bind" << endl;
return 0;
}
if (listen (sock, 5) == -1)
{
cout << "Listen" << endl;
}
if (accept (sock, NULL, NULL) == -1)
{
cout << "Accept" << endl;
return 0;
}
while(1)
{
bytes_read = recv(sock, buf, 1024, 0);
if(bytes_read <= 0) break;
send(sock, buf, bytes_read, 0);
}
close(sock);
}