Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ThePast
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 3
1

Что сделать, чтобы не выбрасывало из цикла? Сокеты, СИ, клиент, сервер

22.03.2016, 23:04. Просмотров 355. Ответов 1
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*C socket server */
#include<stdio.h>
#include<string.h>    //strlen
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr
#include<unistd.h>    //write
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
 
#define BUFFER_SIZE 64
 
int main(int argc , char *argv[])
{
    int socket_desc , client_sock , c , read_size;
    struct sockaddr_in server , client;
    char client_namedir[2000];
     
    //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( 8888 );
     
    //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 , 10);
     
    //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
    while( 1 )
    {
      // Reader();
        ////Send the name of dir back to client
    memset(client_namedir, '\0', 2000);
    read_size = recv(client_sock , client_namedir , 1999 , 0);
    if (read_size<=0)
    continue;
 
    int fd;
    ssize_t read_bytes;
    char buffer[BUFFER_SIZE+1];
    char errmess[200] = "Cannot open file\n";
    fd = open (client_namedir, O_RDONLY);
    if (fd < 0)
    {
        write(client_sock , errmess , strlen(errmess));
        exit (1);
    }
    
while ((read_bytes = read (fd, buffer, BUFFER_SIZE)) > 0)
    {
        buffer[read_bytes] = 0; /*Null-terminator for C string*/ 
        //fputs (buffer, stdout);
 
        write(client_sock , buffer , strlen(buffer));
 
    }
 
    if (read_bytes < 0)
    {
        write(client_sock , errmess , strlen(errmess));
        exit (1);
    }
    close (fd);
    close(client_sock);
    }
 
     
    if(read_size == 0)
    {
        puts("Client disconnected");
        fflush(stdout);
    }
    else if(read_size == -1)
    {
        perror("recv failed");
    }
     return 0;
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
    C ECHO client using sockets
*/
#include<stdio.h> //printf
#include<string.h>    //strlen
#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr
 
int main(int argc , char *argv[])
{
    int sock;
    struct sockaddr_in server;
    char message[1000] , server_reply[2000];
     
    //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("127.0.0.1");
    server.sin_family = AF_INET;
    server.sin_port = htons( 8888 );
 
    //Connect to remote server
    if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        perror("connect failed. Error");
        return 1;
    }
     
    puts("Connected\n");
     
    //keep communicating with server
    while(1)
    {
        printf("Enter message : ");
    memset(message,'\0',1000);
        scanf("%s" , message);
    open(sock);
      send(sock , message , strlen(message) , 0);
        //Send some data
       /*if( send(sock , message , strlen(message) , 0) < 0)
        {
            puts("Send failed");
            return 1;
        }*/
 
    memset(server_reply, '\0', 2000);
         
        //Receive a reply from the server
recv(sock , server_reply , 1999 , 0);
        /*if( recv(sock , server_reply , 1999 , 0) < 0)
        {
            puts("recv failed");
            break;
        }*/
         
        puts("Server reply :");
        puts(server_reply);
    close(sock);
    }
     
    //close(sock);
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2016, 23:04
Ответы с готовыми решениями:

Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент
Добрый день всем. Проблема заключается в следующем: Есть клиент-серверное приложение, хочу...

Клиент Сервер (Как сделать так, что бы Сервер считал этот код и давал ВЫВОД в форме)?
Здравствуйте Уважаемые форумчанины!!! У меня есть вот один код который считает массивы с...

Сокеты. Клиент-сервер
Добрый день, начал разбирать сетевое программирование, на одном компе у меня все прекрасно...

Сокеты, клиент-сервер
Вопрос такой, примерно понял что такое сокеты, и вот надо программу наподобие сервер-клиент...

клиент-сервер (сокеты)
сервер #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include &lt;netinet/in.h&gt; #include...

1
Nosey
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 2
22.03.2016, 23:42 2
ThePast,
Закомментировать exit (1);
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2016, 23:42

Клиент-сервер (сокеты)
Пытаюсь написать два приложения: первое запускается на ПК (написано на JAVA и оно же сервер),...

Клиент-Сервер Сокеты
Объясните пожалуйста. Пытаюсь пока разобраться как вообще работает. Есть ServerSocket и...

Клиент-сервер (сокеты)
Хочу тестировать клиент-серверное приложение на базе слкетов, но не знаю какой IP нужно указывать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.