Я пытался написать класс на C ++ для отправки сокетов на сервер и прослушивания его ответа.
Мой код работает хорошо, но я все еще хочу подключиться к серверу, поэтому я пишу класс, чтобы у объекта все еще было соединение.
# включает "client.h"
/*
Simple tcp client
*/
#include <stdio.h>; //printf
#include <string.h>; //memset
#include <stdlib.h>; //exit(0);
#include <arpa/inet.h>;
#include <sys/socket.h>;
#define SERVER 2;
#define BUFLEN 512 //Max length of buffer
#define PORT 10000 //The port on which to send data
//int sendToServer(__u8 [BUFLEN],__u8 * );
class ClientSocket{
private:
struct sockaddr_in si_other;
int s, i, slen=sizeof(si_other);
char buf[BUFLEN];
public:
void connectTo();
void die(char *s){
perror(s);
exit(1);
}
int sendToServer(u_int8_t [BUFLEN],u_int8_t *);
};
client.cpp
void ClientSocket::connectTo(){
if ((this->s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1){
this->die("socket");
}
memset((char *) &si_other, 0, sizeof(this->si_other));
this->si_other.sin_family = AF_INET;
this->si_other.sin_port = htons(PORT);
if (inet_aton("127.0.0.1", &si_other.sin_addr) == 0) {
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
if(connect(this->s,(struct sockaddr *) &this->si_other,sizeof(this->si_other)) == -1)
{
die("connect()");
}
}
int ClientSocket::sendToServer(u_int8_t messageBin[BUFLEN],u_int8_t * msgTx){
char message[BUFLEN];
for (size_t k = 0; k < BUFLEN; k++) {
message[k] = (char) messageBin[k];
}
//send the message
if (sendto(this->s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen)==-1)
{
die("sendto()");
}
//receive a reply and print it
//clear the buffer by filling null, it might have previously received data
memset(this->buf,'\0', BUFLEN);
//try to receive some data, this is a blocking call
if (recvfrom(this->s, this->buf, 512, 0,(struct sockaddr *) &si_other,(socklen_t*) &slen) == -1)
{
die("recvfrom()");
}
printf("Message recieve by server: ");
puts(buf);
printf("\n");
for (size_t k = 0; k < BUFLEN; k++) {
msgTx[k] = (u_int8_t) this->buf[k];
}
return 1;
}
Хорошо работает для первого сообщения, но у меня появляется ошибка "sendto () Недопустимый аргумент" при отправке второго сообщения.