Listing 6.1: Tworzenie gniazda (str. 44):
int sockd;
struct sockaddr_in my_name;
/* utworzenie gniazda */
sockd = socket(PF_INET, SOCK_STREAM, 0);
if (sockd == -1){
perror("Tworzenie gniazda");
exit(1);
}
/* nadanie nazwy */
my_name.sin_family = PF_INET;
my_name.sin_addr.s_addr = INADDR_ANY;
my_name.sin_port = htons(6500);
status = bind(sockd, (struct sockaddr*)&my_name, sizeof(my_name));
if (status == -1){
perror("Nadanie nazwy");
exit(1);
}
Listing 6.2: Nawiązanie połaczenia (str. 45):
int sockd;
struct sockaddr_in serv_name;
/* utworzenie gniazda */
sockd = socket(AF_INET, SOCK_STREAM, 0);
if (sockd == -1){
perror("Tworzenie gniazda");
exit(1);
}
/* nazwa serwera */
serv_name.sin_family = AF_INET;
serv_name.sin_addr.s_addr = inet_addr(argv[1]);
serv_name.sin_port = htons(6500);
/* polaczenie z serwerem */
status= connect(sockd,(struct sockaddr*)&serv_name,sizeof(serv_name));
if (status == -1){
perror("Nawiazanie polaczenia");
exit(1);
}
Listing 6.3: Oczekiwanie na połaczenia (str. 47):
int sockd,sockd2;
int addrlen;
struct sockaddr_in peer_name;
int status;
/* utworzenie gniazda */
...
/* nadanie nazwy */
...
status = listen(sockd, 5);
if (status == -1){
perror("Nasluchiwanie");
exit(1);
}
/* oczekiwanie na polaczenie */
addrlen = sizeof(peer_name);
sockd2 = accept(sockd, (struct sockaddr*)&peer_name, &addrlen);
if (sockd2 == -1){
perror("Akceptacja polaczenia");
exit(1);
}
Listing 6.4: Klient usługi daytime (str. 48)
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUF 100
#define S_PORT 13
main(int argc, char* argv[]){
int sockd;
int addrlen, lbajt;
struct sockaddr_in serv_name;
char buf[MAX_BUF];
int status;
if (argc < 2){
fprintf(stderr, "Uzyj %s <adres ip>\n", argv[0]);
exit(1);
}
/* utworzenie gniazda */
sockd = socket(AF_INET, SOCK_STREAM, 0);
if (sockd == -1){
perror("Tworzenie gniazda");
exit(1);
}
/* nazwa serwera */
serv_name.sin_family = AF_INET;
inet_aton(argv[1], &serv_name.sin_addr);
serv_name.sin_port = htons(S_PORT);
/* polaczenie z serwerem */
status = connect(sockd, (struct sockaddr*)&serv_name, sizeof(serv_name));
if (status == -1){
perror("Nawiazanie polaczenia");
exit(1);
}
if ((lbajt = read(sockd, buf, MAX_BUF))>0){
write(1, buf, lbajt);
}
else if (lbajt == -1){
perror("Blad odczytu z gniazda");
exit(1);
}
close(sockd);
}
Listing 6.5: Serwer usługi echo z konwersją wielkości liter (str. 49)
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAX_BUF 10
#define S_PORT 6389
int main(){
int sockd,sockd2;
int addrlen;
struct sockaddr_in my_name, peer_name;
int status;
/* utworzenie gniazda */
sockd = socket(AF_INET, SOCK_STREAM, 0);
if (sockd == -1){
perror("Tworzenie gniazda");
exit(1);
}
/* nadanie nazwy */
my_name.sin_family = AF_INET;
my_name.sin_addr.s_addr = INADDR_ANY;
my_name.sin_port = htons(S_PORT);
status = bind(sockd, (struct sockaddr*)&my_name, sizeof(my_name));
if (status == -1){
perror("Nadanie nazwy");
exit(1);
}
status = listen(sockd, 5);
if (status == -1){
perror("Nasluchiwanie");
exit(1);
}
for(;;){
int i, lbajtr, lbajtw;
char* bufptr;
char buf[MAX_BUF];
/* oczekiwanie na polaczenie */
addrlen = sizeof(peer_name);
sockd2 = accept(sockd, (struct sockaddr*)&peer_name, &addrlen);
if (sockd2 == -1){
perror("Akceptacja polaczenia");
exit(1);
}
while ((lbajtr = read(sockd2, buf, MAX_BUF))>0){
for(i=0;i<lbajtr;i++)
buf[i] = toupper( buf[i] );
lbajtw = 0;
bufptr = buf;
while (lbajtw < lbajtr){
lbajtr -= lbajtw;
bufptr += lbajtw;
lbajtw = write(sockd2, bufptr, lbajtr);
if (lbajtw == -1) {
perror("Blad odczytu z gniazda");
exit(1);
}
}
}
if (lbajtr == -1){
perror("Blad odczytu z gniazda");
exit(1);
}
close(sockd2);
}
}