本文共 9313 字,大约阅读时间需要 31 分钟。
今天早上6点起床之后练习的一些c的网络编程的基础例子
client1
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 | /* Make the necessary includes and set up the variables. */ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <sys/un.h> #include <unistd.h> #include <stdlib.h> int main() { int sockfd; int len; struct sockaddr_un address; int result; char ch = 'A' ; /* Create a socket for the client. */ sockfd = socket(AF_UNIX, SOCK_STREAM, 0); /* Name the socket, as agreed with the server. */ address.sun_family = AF_UNIX; strcpy (address.sun_path, "server_socket" ); len = sizeof (address); /* Now connect our socket to the server's socket. */ result = connect(sockfd, ( struct sockaddr *)&address, len); if (result == -1) { perror ( "oops: client1" ); exit (1); } /* We can now read/write via sockfd. */ write(sockfd, &ch, 1); read(sockfd, &ch, 1); printf ( "char from server = %c\n" , ch); close(sockfd); exit (0); } |
server1.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 | /* Make the necessary includes and set up the variables. */ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <sys/un.h> #include <unistd.h> #include <stdlib.h> int main() { int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_un server_address; struct sockaddr_un client_address; /* Remove any old socket and create an unnamed socket for the server. */ unlink( "server_socket" ); server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0); /* Name the socket. */ server_address.sun_family = AF_UNIX; strcpy (server_address.sun_path, "server_socket" ); server_len = sizeof (server_address); bind(server_sockfd, ( struct sockaddr *)&server_address, server_len); /* Create a connection queue and wait for clients. */ listen(server_sockfd, 5); while (1) { char ch; printf ( "server waiting\n" ); /* Accept a connection. */ client_len = sizeof (client_address); client_sockfd = accept(server_sockfd, ( struct sockaddr *)&client_address, &client_len); /* We can now read/write to client on client_sockfd. */ read(client_sockfd, &ch, 1); ch++; write(client_sockfd, &ch, 1); close(client_sockfd); } } |
第二个服务器客户端的例子:
client
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 | /* Make the necessary includes and set up the variables. */ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> int main() { int sockfd; int len; struct sockaddr_in address; int result; char ch = 'A' ; /* Create a socket for the client. */ sockfd = socket(AF_INET, SOCK_STREAM, 0); /* Name the socket, as agreed with the server. */ address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr( "127.0.0.1" ); address.sin_port = htons(9734); len = sizeof (address); /* Now connect our socket to the server's socket. */ result = connect(sockfd, ( struct sockaddr *)&address, len); if (result == -1) { perror ( "oops: client3" ); exit (1); } /* We can now read/write via sockfd. */ write(sockfd, &ch, 1); read(sockfd, &ch, 1); printf ( "char from server = %c\n" , ch); close(sockfd); exit (0); } |
server
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 | /* Make the necessary includes and set up the variables. */ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> int main() { int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; /* Remove any old socket and create an unnamed socket for the server. */ server_sockfd = socket(AF_INET, SOCK_STREAM, 0); /* Name the socket. */ server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(9734); server_len = sizeof (server_address); bind(server_sockfd, ( struct sockaddr *)&server_address, server_len); /* Create a connection queue and wait for clients. */ listen(server_sockfd, 5); while (1) { char ch; printf ( "server waiting\n" ); /* Accept a connection. */ client_len = sizeof (client_address); client_sockfd = accept(server_sockfd, ( struct sockaddr *)&client_address, &client_len); /* We can now read/write to client on client_sockfd. */ read(client_sockfd, &ch, 1); ch++; write(client_sockfd, &ch, 1); close(client_sockfd); } } |
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 | /* As usual, make the appropriate includes and declare the variables. */ #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> int main( int argc, char *argv[]) { char *host, **names, **addrs; struct hostent *hostinfo; /* Set the host in question to the argument supplied with the getname call, or default to the user's machine. */ if (argc == 1) { char myname[256]; gethostname(myname, 255); host = myname; } else host = argv[1]; /* Make the call to gethostbyname and report an error if no information is found. */ hostinfo = gethostbyname(host); if (!hostinfo) { fprintf (stderr, "cannot get info for host: %s\n" , host); exit (1); } /* Display the hostname and any aliases it may have. */ printf ( "results for host %s:\n" , host); printf ( "Name: %s\n" , hostinfo -> h_name); printf ( "Aliases:" ); names = hostinfo -> h_aliases; while (*names) { printf ( " %s" , *names); names++; } printf ( "\n" ); /* Warn and exit if the host in question isn't an IP host. */ if (hostinfo -> h_addrtype != AF_INET) { fprintf (stderr, "not an IP host!\n" ); exit (1); } /* Otherwise, display the IP address(es). */ addrs = hostinfo -> h_addr_list; while (*addrs) { printf ( " %s" , inet_ntoa(*( struct in_addr *)*addrs)); addrs++; } printf ( "\n" ); exit (0); } |
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 | /* Start with the usual includes and declarations. */ #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main( int argc, char *argv[]) { char *host; int sockfd; int len, result; struct sockaddr_in address; struct hostent *hostinfo; struct servent *servinfo; char buffer[128]; if (argc == 1) host = "localhost" ; else host = argv[1]; /* Find the host address and report an error if none is found. */ hostinfo = gethostbyname(host); if (!hostinfo) { fprintf (stderr, "no host: %s\n" , host); exit (1); } /* Check that the daytime service exists on the host. */ servinfo = getservbyname( "daytime" , "tcp" ); if (!servinfo) { fprintf (stderr, "no daytime service\n" ); exit (1); } printf ( "daytime port is %d\n" , ntohs(servinfo -> s_port)); /* Create a socket. */ sockfd = socket(AF_INET, SOCK_STREAM, 0); /* Construct the address for use with connect... */ address.sin_family = AF_INET; address.sin_port = servinfo -> s_port; address.sin_addr = *( struct in_addr *)*hostinfo -> h_addr_list; len = sizeof (address); /* ...then connect and get the information. */ result = connect(sockfd, ( struct sockaddr *)&address, len); if (result == -1) { perror ( "oops: getdate" ); exit (1); } result = read(sockfd, buffer, sizeof (buffer)); buffer[result] = '\0' ; printf ( "read %d bytes: %s" , result, buffer); close(sockfd); exit (0); } |
getdate-udp
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 | /* Start with the usual includes and declarations. */ #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main( int argc, char *argv[]) { char *host; int sockfd; int len, result; struct sockaddr_in address; struct hostent *hostinfo; struct servent *servinfo; char buffer[128]; if (argc == 1) host = "localhost" ; else host = argv[1]; /* Find the host address and report an error if none is found. */ hostinfo = gethostbyname(host); if (!hostinfo) { fprintf (stderr, "no host: %s\n" , host); exit (1); } /* Check that the daytime service exists on the host. */ servinfo = getservbyname( "daytime" , "udp" ); if (!servinfo) { fprintf (stderr, "no daytime service\n" ); exit (1); } printf ( "daytime port is %d\n" , ntohs(servinfo -> s_port)); /* Create a UDP socket. */ sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* Construct the address for use with sendto/recvfrom... */ address.sin_family = AF_INET; address.sin_port = servinfo -> s_port; address.sin_addr = *( struct in_addr *)*hostinfo -> h_addr_list; len = sizeof (address); result = sendto(sockfd, buffer, 1, 0, ( struct sockaddr *)&address, len); result = recvfrom(sockfd, buffer, sizeof (buffer), 0, ( struct sockaddr *)&address, &len); buffer[result] = '\0' ; printf ( "read %d bytes: %s" , result, buffer); close(sockfd); exit (0); } |
转载地址:http://rzwym.baihongyu.com/