我不知道如何在C中通过套接字发送数组

时间:2015-11-07 14:41:30

标签: c sockets client-server

客户端读取一个数字,将其发送到找到其除数的服务器,然后服务器将divisosr发送回打印它们的客户端。

int main(){

int s;

struct sockaddr_in server,client;
int l, conn;

s = socket (AF_INET, SOCK_STREAM, 0);
if (s < 0){
    printf("Error on creating the server.");
    return 1;
}

memset(&server, 0, sizeof(server));
server.sin_port = htons(1234);
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;

if (bind(s,(struct sockaddr *) &server, sizeof(server)) < 0){
    printf("Eroare la bind.");
    return 1;
}

listen(s,5);

l = sizeof(client);
memset(&client, 0, sizeof(client));

while (1){
    uint16_t n, array[10], arraytosend[10];
    conn = accept(s,(struct sockaddr *) &client,&l);
    recv(conn, &n, sizeof(n), MSG_WAITALL);
    n = ntohs(n);

    int d, i=0;
    for (d=2; d<=n/2; d++){
        if ( n % d == 0){
            arraytosend[i] = htonl(array[d]) ;
            i++;
        }
    }
    send (conn, &array, sizeof(array), 0);
    close(conn);
    }
}

客户端:

int main(){
uint16_t n, array[10], arrayrec[10];

struct sockaddr_in server;

int c;

c = socket(AF_INET, SOCK_STREAM, 0);

if (c < 0){
    printf("Eroare la creare socket client.");
    return 1;
}

memset(&server, 0, sizeof(server));
server.sin_port = htons(1234);
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;

if (connect(c, (struct sockaddr *) &server, sizeof(server))< 0){
    printf("Eroare la conectare.");
    return 1;
}

printf("Give a number: ");
scanf("%hu", &n);

n = htons(n);
send(c,&n, sizeof(n),0);

recv(c, &array, sizeof(array), MSG_WAITALL);
int p=0;
p = htons(p);
for (p=0; p<10; p++){
    array[p] = ntohl(arrayrec[p]);
    printf("%hu", array[p]);
}
close(c);

}

当我运行服务器,然后是客户端时,它会打印:0000000000

有人可以帮帮我吗?

0 个答案:

没有答案