客户程序 client3.c ,它通过网络连接到一个网络套接字。
#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> #include <stdlib.h> int main() { int sockfd; int len; struct sockaddr_in address; int result; char ch = 'A'; //为客户创建一个套接字 sockfd = socket( AF_INET, SOCK_STREAM, 0 ); //根据服务器的情况给套接字命名 address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("127.0.0.1"); address.sin_port = htons(9734); len = sizeof( address ); //将客户的套接字连接到服务器的套接字 result = connect( sockfd, (struct sockaddr *)&address, len ); if( -1 ==result ) { perror("oops: client1"); exit( 1 ); } //通过sockfd进行读写操作 write( sockfd, &ch, 1 ); read( sockfd, &ch, 1 ); printf("char from server = %c\n", ch ); close( sockfd ); exit(0); }
网络服务器程序 server3.c ,让它在选好的端口撒谎那个等待客户的连接。
#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, client_address; unlink( "server_socket" ); //为服务器创建一个未命名套接字 server_sockfd = socket( AF_INET, SOCK_STREAM, 0 ); //命名套接字 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 ); //创建监听队列 listen( server_sockfd, 5 ) ; while( 1 ) { char ch; printf("server waiting\n"); client_len = sizeof( client_address ); client_sockfd = accept( server_sockfd, (struct sockaddr *)&client_address, &client_len); read( client_sockfd, &ch, 1 ); ch++; write( client_sockfd, &ch, 1 ); close( client_sockfd ); } exit( 1 ); }
运行结果:
[zhang@localhost document]$ ./server3 & ./client3
[1] 6012
server waiting
server waiting
char from server = B