Я не знаю, как отправить массив целых чисел с клиента на сервер.По некоторым причинам в фиксированный массив, который я отправляю, на стороне сервера, когда он получен, записываются только первые два значения массива.Итак, он работает для первых двух значений массива, но теперь для других, и я не знаю почему.
код клиента
#include<stdio.h> //printf
#include<string.h> //strlen
#include<sys/socket.h> //socket
#include<arpa/inet.h> //inet_addr
#include <fcntl.h> //for open
#include <unistd.h> //for close
#include <sys/types.h> //sendto
#include <sys/socket.h> //sendto
#define DEFAULT_BUFLEN 512
#define DEFAULT_CLIENT_PORT 27016
#define DEFAULT_SERVER_PORT 27015
#define NUM_OF_PAR 7
int main(int argc, char *argv[])
{
int sock;
struct sockaddr_in server, client;
char message[DEFAULT_BUFLEN];
//Create socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1)
{
printf("Could not create socket");
}
puts("Socket created");
server.sin_addr.s_addr = inet_addr("ip_address");
server.sin_family = AF_INET;
server.sin_port = htons(DEFAULT_SERVER_PORT);
//Connect to remote server
if(connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0)
{
perror("connect failed. Error");
return 1;
}
puts("Connected\n");
int array[] = {1, 12, 3, 3, 300, 5, 3};
printf("Sending array\n");
for(int i = 0; i < NUM_OF_PAR; i++){
printf("%d ", array[i]);
}
if(send(sock, array, NUM_OF_PAR, 0) < 0)
{
printf("\nArray is not successfully sent\n");
}
else
{
printf("\nArray is sent\n");
}
printf("\n");
close(sock);
return 0;
}
серверкод
#include<stdio.h> //printf
#include<string.h> //strlen
#include<sys/socket.h> //socket
#include<arpa/inet.h> //inet_addr
#include<unistd.h> //write
#include<stdlib.h>
#include <sys/types.h> //recvfrom
#include <sys/socket.h> //recvfrom
#define DEFAULT_BUFLEN 512
#define DEFAULT_CLIENT_PORT 27016
#define DEFAULT_SERVER_PORT 27015
#define NUM_OF_PAR 7
int main(int argc , char *argv[])
{
int socket_desc, client_sock, c, read_size;
struct sockaddr_in server, client;
char client_message[DEFAULT_BUFLEN];
int sock;
//Create socket
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if (socket_desc == -1)
{
printf("Could not create socket");
}
puts("Socket created");
//Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(DEFAULT_SERVER_PORT);
//Bind
if(bind(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0)
{
//print the error message
perror("bind failed. Error");
return 1;
}
puts("bind done");
//Listen
listen(socket_desc, 1);
//Accept and incoming connection
puts("Waiting for incoming connections...");
c = sizeof(struct sockaddr_in);
//accept connection from an incoming client
client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
if(client_sock < 0)
{
perror("accept failed");
return 1;
}
puts("Connection accepted");
//Receive a message from client
int arrayReceived[NUM_OF_PAR];
while((read_size = recv(client_sock, &arrayReceived, NUM_OF_PAR, 0)) > 0){
printf("Received well\n");
}
if(read_size == 0)
{
puts("Client disconnected");
}
else if(read_size == -1)
{
perror("recv failed");
}
printf("Received parameters: \n");
for(int i = 0; i < NUM_OF_PAR; i++)
{
printf("%d ", arrayReceived[i]);
}
printf("\n");
close(sock);
return 0;
}
Я хотел бы выписать на стороне сервера все значения массива, которые я отправил с клиента.