0% found this document useful (0 votes)
27 views

Network Programming

The document discusses network programming and socket programming in C. It provides an overview of header files, functions, internet address representation and TCP server and client code prototypes. It also includes examples of TCP client-server programs to send and receive strings with the server.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

Network Programming

The document discusses network programming and socket programming in C. It provides an overview of header files, functions, internet address representation and TCP server and client code prototypes. It also includes examples of TCP client-server programs to send and receive strings with the server.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 40

Network Programming

Debaloy Chatterjee
2

Table of Contents:
Header Files for Socket Programming: 4

sys/socket.h 4

sys/types.h, sys/stat.h and fcntl.h 4

unistd.h 4

arpa/inet.h 4

Basic Functions of Server and Client: 5

Internet Address Representation in C: 5

TCP Iterative Server: 5

Server Code Prototype: 7

Client Code Prototype: 9

TCP Programs: 11
Prog 01: Send string to and from server 11

Server Code: 11

Client Code: 12

Prog 02: Count no of vowels 14

Server Code: 14

Client Code: 16

Prog 03: String Reverse 18

Server Code: 18

Client Code: 20

Prog 04: String Length 22

Server Code: 22

Client Code: 24

Prog 05: Multiply Two Numbers 26

Server Code: 26

Client Code: 28

Prog 06: Extract Number From String 30

Server Code: 30

Client Code: 32
Prog 07: Send IP Address 34
3

Server Code: 34

Client Code: 35

Prog 08: ASCII Sum 37

Server Code: 37
Client Code: 38
4

Header Files for Socket Programming:


sys/socket.h
1. int socket(int domain, int type, int protocol)
domain:
Address Family: AF_INET, AF_INET6
Protocol Family: PF_INET, PF_INET6
type:
TCP: SOCK_STREAM
UDP: SOCK_DGRAM
protocol:
do “cat /etc/protocols” to look at all the protocols

eg:
int sockfd = socket(AF_INET, SOCK_STREAM, 0)

2. int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen)


3. int listen(int sockfd, int backlog)
4. int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
5. int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen)

sys/types.h, sys/stat.h and fcntl.h


1. int open(const char *path, int flag)

unistd.h
1. int close(int fd)
2. ssize_t write(int fd, const void *buf, size_t nbytes)
3. ssize_t read(int fd, void *buff, size_t nbytes)

arpa/inet.h
1. unsigned long htonl(unsigned long) // for IP (host to network order)
2. unsigned short htons(unsigned short) // for Port (host to network)
3. unsigned long ntohl(unsigned long) // for IP (network to host)
4. unsigned short ntohs(unsigned short) // for Port (network to host)
5. unsigned long inet_addr(const char *addr) // returns decimal notation
6. inet_aton(“127.0.0.1”, &addr.sin_addr) // struct sockaddr_in addr;
7. char *inet_ntoa(struct in_addr) // returns dotted notation IP

INADDR_ANY is a flag means IP address is not set, it can be any. Any client can connect.
5

Basic Functions of Server and Client:

Server: socket, bind, listen, accept, read, write, close client, close server
Client: socket, connect, write, read, close

Internet Address Representation in C:


1. IP Address + Port
struct sockaddr_in {
sa_family_t sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};

2. IP Address
struct in_addr {
in_addr_t s_addr;
};

TCP Iterative Server:

For TCP client: socket, connect, write/read, close


6

* In UDP Server, there is no need to call listen() and accept() functions.


7

Server Code Prototype:

#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>

#include <unistd.h>

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 6999

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd; // fd: file descriptor
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_addr.s_addr = htonl(LOCALHOST);
server_info.sin_port = htons(PORT);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// bind socket
if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind socket.\n");
return -1;
}
printf("Socket binded.\n");

// listen
8

if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
}
printf("Listening on PORT: %d", PORT);

while (1) {
// accept
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
}
printf("Client connected.\n");

// do client stuff

// close client connection


close(cfd);
}

// close server
close(sfd);
return 0;
}
9

Client Code Prototype:

#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>

#include <unistd.h>

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 6999

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_addr.s_addr = htonl(LOCALHOST);
server_info.sin_port = htons(PORT);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// connect to server
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect to server on PORT: %d", PORT);
return -1;
}
printf("Connected to server on PORT: %d", PORT);

// do stuff
10

// close
close(sfd);
}
11

TCP Programs:

Prog 01: Send string to and from server

Server Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 5000

int main(int argc, char **argv) {


// create the socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);
server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
} else printf("Socket created.\n");

// bind the socket


if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind socket to local address.\n");
return -1;
} else printf("Socket binded to local address.\n");
12

// listen
if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
} else printf("Server listening on PORT: %d", PORT);

char buffer[BUFFSIZE];

while (1) {
// accept connections
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
} else printf("Client accepted.\n");

// do client stuff
bzero(buffer, sizeof(buffer));
read(cfd, buffer, sizeof(buffer));
printf("Client %d: %s", cfd, buffer);
strcpy(buffer, "Hello Client!");
write(cfd, buffer, sizeof(buffer));

// close client
close(cfd);
}

// close server
close(sfd);
return 0;

Client Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>
13

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 5000

int main(int argc, char **argv) {


// create the socket info struct
struct sockaddr_in server_info;
int sfd, cfd;
socklen_t server_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);
server_info_len = sizeof(server_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
} else printf("Socket created.\n");

// connet to server
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect to server on PORT: %d\n", PORT);
return -1;
} else printf("Connected to server on PORT: %d\n", PORT);

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));

printf("\n Enter a message for the server: ");

int n = 0;
while((buffer[n++] = getchar()) != '\n' && n < BUFFSIZE);
write(sfd, buffer, sizeof(buffer));
read(sfd, buffer, sizeof(buffer));
printf("\n Server: %s\n", buffer);

// clean up
close(sfd);
return 0;
}
14

Prog 02: Count no of vowels

Server Code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int isVowel(char letter) {


char vowel[5] = { 'a', 'e', 'i', 'o', 'u' };

for (int i = 0; i < 5; i++)


if (tolower(letter) == vowel[i]) return 1;

return 0;
}

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
15

return -1;
}
printf("Socket created.\n");

// bind socket
if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind.\n");
return -1;
}
printf("Binding successful.\n");

// listen
if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
}
printf("Listening on PORT: %d\n", PORT);

while (1) {
// accept
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
}
printf("Client accepted.\n");

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));

int count = 0;
read(cfd, buffer, sizeof(buffer));

int n = 0;
while(buffer[n++] != '\n' && n < BUFFSIZE)
if (isVowel(buffer[n])) count++;

sprintf(buffer, "%d", count);


write(cfd, buffer, sizeof(buffer));

// close client
close(cfd);
}
16

// close server
close(sfd);
return 0;
}

Client Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// connect
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect on PORT: %d", PORT);
17

return -1;
}
printf("Connected to server on PORT: %d", PORT);

// do stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));

int n = 0;
printf("\n Enter string: ");
while((buffer[n++] = getchar()) != '\n' && n < BUFFSIZE);

write(sfd, buffer, sizeof(buffer));


read(sfd, buffer, sizeof(buffer));
printf("\n No of vowels: %s", buffer);

// close
close(sfd);
return 0;
}
18

Prog 03: String Reverse

Server Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 5000

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_addr.s_addr = htonl(LOCALHOST);
server_info.sin_port = htons(PORT);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// bind socket
if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind socket.\n");
return -1;
}
19

printf("Socket binded.\n");

// listen
if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
}
printf("Listening on PORT: %d", PORT);

while (1) {
// accept
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
}
printf("Client connected.\n");

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));
read(cfd, buffer, sizeof(buffer));
int len = strlen(buffer);
char result[BUFFSIZE];
bzero(result, sizeof(result));

int n = 0;
for (int i = len - 1; i >= 0; i--) {
result[n] = buffer[i];
n++;
}

write(cfd, result, sizeof(result));

// close client connection


close(cfd);
}

// close server
close(sfd);
return 0;
}
20

Client Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 5000

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info;
int sfd;
socklen_t server_info_len;

server_info.sin_family = AF_INET;
server_info.sin_addr.s_addr = htonl(LOCALHOST);
server_info.sin_port = htons(PORT);
server_info_len = sizeof(server_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// connect to server
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect to server on PORT: %d\n", PORT);
return -1;
}
21

printf("Connected to server on PORT: %d\n", PORT);

// do stuff
char buffer[BUFFSIZE];
int n = 0;
bzero(buffer, sizeof(buffer));

printf("Enter a string: ");


while ((buffer[n++] = getchar()) != '\n' && n < BUFFSIZE);

write(sfd, buffer, sizeof(buffer));

bzero(buffer, sizeof(buffer));
read(sfd, buffer, sizeof(buffer));

printf("\nReply from server: %s", buffer);

// close
close(sfd);

return 0;
}
22

Prog 04: String Length

Server Code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// bind socket
if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind.\n");
return -1;
}
23

printf("Binding successful.\n");

// listen
if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
}
printf("Listening on PORT: %d\n", PORT);

while (1) {
// accept
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
}
printf("Client accepted.\n");

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));

int count = 0;
read(cfd, buffer, sizeof(buffer));
int tempLen = strlen(buffer);
int len = 0, index = 0;
while (buffer[index] != '\n') {
if (buffer[index] != ' ') len++;
index++;
}

char tempBuffer[BUFFSIZE];
bzero(tempBuffer, sizeof(tempBuffer));

// converting len into string


int i = 0;
while (len > 0) {
int digit = len % 10;
tempBuffer[i++] = (char)(digit + 48);
len /= 10;
}
i--;

bzero(buffer, sizeof(buffer));
24

int j = 0;
while(i >= 0)
buffer[j++] = tempBuffer[i--];

write(cfd, buffer, sizeof(buffer));

// close client
close(cfd);
}

// close server
close(sfd);
return 0;
}

Client Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
25

sfd = socket(AF_INET, SOCK_STREAM, 0);


if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// connect
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect on PORT: %d", PORT);
return -1;
}
printf("Connected to server on PORT: %d", PORT);

// do stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));
int n = 0;
printf("\n Enter string: ");
while((buffer[n++] = getchar()) != '\n' && n < BUFFSIZE);
write(sfd, buffer, sizeof(buffer));
read(sfd, buffer, sizeof(buffer));
printf("\n String length: %s", buffer);

// close
close(sfd);
return 0;
}
26

Prog 05: Multiply Two Numbers

Server Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>

#include <unistd.h>

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 5000

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_addr.s_addr = htonl(LOCALHOST);
server_info.sin_port = htons(PORT);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// bind socket
if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind socket.\n");
return -1;
}
27

printf("Socket binded.\n");

// listen
if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d\n", PORT);
return -1;
}
printf("Listening on PORT: %d\n", PORT);

while (1) {
// accept
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
}
printf("Client connected.\n");

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));

if (read(cfd, buffer, sizeof(buffer)) < 0) {


perror("Failed to read number 1 from client.\n");
return -1;
}
int n1 = atoi(buffer);

bzero(buffer, sizeof(buffer));

if (read(cfd, buffer, sizeof(buffer)) < 0) {


perror("Failed to read number 2 from client.\n");
return -1;
}
int n2 = atoi(buffer);

bzero(buffer, sizeof(buffer));
int res = n1 * n2, len = 0;

while (res > 0) {


int rem = res % 10;
buffer[len++] = (char)(rem + 48);
res /= 10;
}
28

char reply[BUFFSIZE];
bzero(reply, sizeof(reply));
int n = 0;

for (int i = len - 1; i >= 0; i--)


reply[n++] = buffer[i];

if (write(cfd, reply, sizeof(reply)) < 0) {


perror("Failed to write data to client.\n");
return -1;
}

// close client connection


close(cfd);
}

// close server
close(sfd);
return 0;
}

Client Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>

#include <unistd.h>

#define BUFFSIZE 256


#define LOCALHOST 0x7f000001
#define PORT 5000

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_addr.s_addr = htonl(LOCALHOST);
29

server_info.sin_port = htons(PORT);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// connect to server
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect to server on PORT: %d\n", PORT);
return -1;
}
printf("Connected to server on PORT: %d\n", PORT);

// do stuff
char buffer[BUFFSIZE];
int n = 0;
bzero(buffer, sizeof(buffer));
printf("\n Enter number 1: ");
while((buffer[n++] = getchar()) != '\n');
write(sfd, buffer, sizeof(buffer));
n = 0;
printf("\n Enter number 2: ");
while((buffer[n++] = getchar()) != '\n');
write(sfd, buffer, sizeof(buffer));

read(sfd, buffer, sizeof(buffer));


printf("\n Result from server: %s", buffer);

// close
close(sfd);
return 0;
}
30

Prog 06: Extract Number From String

Server Code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// bind socket
if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind.\n");
return -1;
}
31

printf("Binding successful.\n");

// listen
if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
}
printf("Listening on PORT: %d\n", PORT);

while (1) {
// accept
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
}
printf("Client accepted.\n");

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));

read(cfd, buffer, sizeof(buffer));

int n = 0, index = 0;
char result[BUFFSIZE];
bzero(result, sizeof(result));

while(buffer[n++] != '\n' && n < BUFFSIZE)


if (isdigit(buffer[n])) {
result[index++] = buffer[n];
}

write(cfd, result, sizeof(result));

// close client
close(cfd);
}

// close server
close(sfd);
return 0;
}
32

Client Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// connect
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect on PORT: %d", PORT);
return -1;
}
printf("Connected to server on PORT: %d", PORT);

// do stuff
char buffer[BUFFSIZE];
33

bzero(buffer, sizeof(buffer));

int n = 0;
printf("\n Enter string: ");
while((buffer[n++] = getchar()) != '\n' && n < BUFFSIZE);

write(sfd, buffer, sizeof(buffer));


read(sfd, buffer, sizeof(buffer));
printf("\n Number string: %s", buffer);

// close
close(sfd);
return 0;
}
34

Prog 07: Send IP Address

Server Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000

int main(int argc, char **argv) {


// create the socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
char host[] = "127.0.0.1";
server_info.sin_addr.s_addr = inet_addr(host);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
} else printf("Socket created.\n");

// bind the socket


if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind socket to local address.\n");
return -1;
} else printf("Socket binded to local address.\n");

// listen
35

if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
} else printf("Server listening on PORT: %d", PORT);

char buffer[BUFFSIZE];
while (1) {
// accept connections
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
} else printf("Client accepted.\n");

// do client stuff
bzero(buffer, sizeof(buffer));
strcpy(buffer, host);
write(cfd, buffer, sizeof(buffer));

// close client
close(cfd);
}

// close server
close(sfd);
return 0;
}

Client Code:
#include <stdio.h>
#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000

int main(int argc, char **argv) {


// create the socket info struct
36

struct sockaddr_in server_info;


int sfd, cfd;
socklen_t server_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
char host[] = "127.0.0.1";
server_info.sin_addr.s_addr = inet_addr(host);

server_info_len = sizeof(server_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
} else printf("Socket created.\n");

// connet to server
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect to server on PORT: %d\n", PORT);
return -1;
} else printf("Connected to server on PORT: %d\n", PORT);

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));
read(sfd, buffer, sizeof(buffer));
printf("\n Server IP: %s\n", buffer);

// clean up
close(sfd);
return 0;
}
37

Prog 08: ASCII Sum

Server Code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd, cfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// bind socket
if (bind(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
perror("Failed to bind.\n");
return -1;
}
38

printf("Binding successful.\n");

// listen
if (listen(sfd, 5) < 0) {
printf("Failed to listen on PORT: %d", PORT);
return -1;
}
printf("Listening on PORT: %d\n", PORT);

while (1) {
// accept
cfd = accept(sfd, (struct sockaddr*)&client_info, &client_info_len);
if (cfd < 0) {
perror("Failed to accept client.\n");
return -1;
}
printf("Client accepted.\n");

// do client stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));

int sum = 0;
read(cfd, buffer, sizeof(buffer));

int n = 0;
while(buffer[n++] != '\n' && n < BUFFSIZE)
sum += (int)(buffer[n]);

sprintf(buffer, "%d", sum);


write(cfd, buffer, sizeof(buffer));

// close client
close(cfd);
}

// close server
close(sfd);
return 0;
}

Client Code:
#include <stdio.h>
39

#include <string.h>

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <arpa/inet.h>
#include <unistd.h>

#define BUFFSIZE 256


#define PORT 5000
#define LOCALHOST 0x7f000001

int main(int argc, char **argv) {


// create socket info struct
struct sockaddr_in server_info, client_info;
int sfd;
socklen_t server_info_len, client_info_len;

server_info.sin_family = AF_INET;
server_info.sin_port = htons(PORT);
server_info.sin_addr.s_addr = htonl(LOCALHOST);

server_info_len = sizeof(server_info);
client_info_len = sizeof(client_info);

// create socket
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("Failed to create socket.\n");
return -1;
}
printf("Socket created.\n");

// connect
if (connect(sfd, (struct sockaddr*)&server_info, server_info_len) < 0) {
printf("Failed to connect on PORT: %d", PORT);
return -1;
}
printf("Connected to server on PORT: %d", PORT);

// do stuff
char buffer[BUFFSIZE];
bzero(buffer, sizeof(buffer));
40

int n = 0;
printf("\n Enter string: ");
while((buffer[n++] = getchar()) != '\n' && n < BUFFSIZE);

write(sfd, buffer, sizeof(buffer));

read(sfd, buffer, sizeof(buffer));


printf("\n ASCII SUM: %s", buffer);

// close
close(sfd);
return 0;
}

You might also like