Skip to content

Commit 27a81c9

Browse files
committed
improved UDP
1 parent b034684 commit 27a81c9

File tree

3 files changed

+69
-41
lines changed

3 files changed

+69
-41
lines changed

04-udp-echo-client-server/README.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,26 @@ unused nonreservedport for its communication.
2424
## Who would use an echo service '?'
2525

2626
It is not a service that the average user finds interesting. However, programmers who design, implement, measure, or modify network protocol software, or network managers who test routes and debug communication problems, often use echo servers in testing. For example, an echo service can be used
27-
to determineif it is possible to reach a remote machine.
27+
to determineif it is possible to reach a remote machine.
28+
29+
## Learn about code
30+
31+
* For implementation of UDP use SOCK_DGRAM
32+
33+
```C
34+
int serverDescriptor = socket(AF_INET, SOCK_DGRAM, 0);
35+
```
36+
37+
* For sending message use sendto function
38+
39+
```C
40+
sendto(serverDescriptor,sendMessage,MAXLINE,0,(struct sockaddr*)&serverAddress,addressLength);
41+
```
42+
43+
* For recieving message use recv
44+
45+
```C
46+
recvfrom(socketDescriptor,message,MAXLINE,0,(struct sockaddr*)&clientAddress,&addressLength);
47+
```
48+
49+
* On server side only use ```bind()``` function

04-udp-echo-client-server/client.c

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,43 @@
77

88
#include <stdio.h>
99
#include <stdlib.h>
10+
#include <unistd.h>
1011
#include <sys/types.h>
1112
#include <sys/socket.h>
1213
#include <netinet/in.h>
1314

1415
#define MAXLINE 1024
16+
#define PORT 5035
1517

1618
int main(){
17-
int socket_descriptor;
18-
int n;
19-
socklen_t length;
20-
char sendline[MAXLINE],recvline[MAXLINE];
21-
struct sockaddr_in servaddr;
19+
// socket descriptor creation in udp mode
20+
int serverDescriptor = socket(AF_INET, SOCK_DGRAM, 0);
21+
22+
// for storing address of address
23+
socklen_t addressLength;
24+
25+
// preparing message
26+
char sendMessage[MAXLINE],recvMessage[MAXLINE];
2227
printf("\nEnter message :");
23-
scanf("%s",sendline);
24-
socket_descriptor = socket(AF_INET,SOCK_DGRAM,0);
25-
26-
servaddr.sin_family = AF_INET;
27-
servaddr.sin_addr.s_addr = INADDR_ANY;
28-
servaddr.sin_port = htons(5035);
29-
30-
int isConnect = connect(socket_descriptor,(struct sockaddr*)&servaddr,sizeof(servaddr));
31-
32-
if(isConnect==-1){
33-
printf("\nNot connected");
34-
}
35-
36-
length = sizeof(servaddr);
37-
sendto(socket_descriptor,sendline,MAXLINE,0,(struct sockaddr*)&servaddr,length);
38-
n=recvfrom(socket_descriptor,recvline,MAXLINE,0,NULL,NULL);
39-
recvline[n]=0;
40-
printf("\nServer's Echo : %s\n",recvline);
28+
fgets(sendMessage,sizeof(sendMessage),stdin);
29+
30+
// storing address in serverAddress
31+
struct sockaddr_in serverAddress;
32+
serverAddress.sin_family = AF_INET;
33+
serverAddress.sin_addr.s_addr = INADDR_ANY;
34+
serverAddress.sin_port = htons(PORT);
35+
36+
// storing address size
37+
addressLength = sizeof(serverAddress);
38+
39+
// checking connection
40+
connect(serverDescriptor,(struct sockaddr*)&serverAddress,addressLength);
41+
42+
// sending and receiving the messages
43+
sendto(serverDescriptor,sendMessage,MAXLINE,0,(struct sockaddr*)&serverAddress,addressLength);
44+
recvfrom(serverDescriptor,recvMessage,MAXLINE,0,NULL,NULL);
45+
46+
printf("\nServer's Echo : %s\n",recvMessage);
4147

4248
return 0;
4349
}

04-udp-echo-client-server/server.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,36 @@
1313
// time
1414

1515
#define MAXLINE 1024
16+
#define PORT 5035
1617

1718
int main(){
1819

19-
int socket_descriptor;
20-
int n;
21-
socklen_t length;
22-
char msg[MAXLINE];
23-
struct sockaddr_in servaddr,cliaddr;
20+
int socketDescriptor = socket(AF_INET, SOCK_DGRAM, 0);
21+
int number;
22+
socklen_t addressLength;
23+
char message[MAXLINE];
2424

25-
socket_descriptor = socket(AF_INET,SOCK_DGRAM,0);
25+
struct sockaddr_in serverAddress,clientAddress;
26+
serverAddress.sin_family = AF_INET;
27+
serverAddress.sin_addr.s_addr=INADDR_ANY;
28+
serverAddress.sin_port=htons(PORT);
2629

27-
servaddr.sin_family = AF_INET;
28-
servaddr.sin_addr.s_addr=INADDR_ANY;
29-
servaddr.sin_port=htons(5035);
30+
bind(socketDescriptor,(struct sockaddr*)&serverAddress,sizeof(serverAddress));
3031

31-
bind(socket_descriptor,(struct sockaddr*)&servaddr,sizeof(servaddr));
32+
printf("\nServer Started ...\n");
3233

33-
printf("\nServer Started ...");
34-
while(1){
34+
while(1){
3535
printf("\n");
36-
length = sizeof(cliaddr);
36+
addressLength = sizeof(clientAddress);
3737

38-
n = recvfrom(socket_descriptor,msg,MAXLINE,0,(struct sockaddr*)&cliaddr,&length);
38+
number = recvfrom(socketDescriptor,message,MAXLINE,0,(struct sockaddr*)&clientAddress,&addressLength);
3939

40-
printf("\n Client's Message:%s ",msg);
40+
printf("\n Client's Message: %s ",message);
4141

42-
if(n<6)
42+
if(number<6)
4343
perror("send error");
4444

45-
sendto(socket_descriptor,msg,n,0,(struct sockaddr*)&cliaddr,length);
45+
sendto(socketDescriptor,message,number,0,(struct sockaddr*)&clientAddress,addressLength);
4646
}
4747
return 0;
4848
}

0 commit comments

Comments
 (0)