Что сделать, чтобы не выбрасывало из цикла? Сокеты, СИ, клиент, сервер
22.03.2016, 23:04. Просмотров 548. Ответов 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
|