第3章详细设计和实现
3.1相关技术
1)tcp编程,主要包括socket()函数、bind()函数、listen()函数、recv()函数、send()函数以及客户端的connect()函数。
2)c语言中对结构体的操作,和对字符串的比较
3)对文件的读写操作
4)popen调用shell
3.2开发工具和运行环境
本系统在ubantu 16.4 lts环境下开发,所用的工具为vi编辑器和gedit编辑器,以及gcc编译工具。
3.3主要功能的源码
3.3.1服务器端socket的建立
if ( (sockfd = socket(af_inet, sock_stream, 0)) < 0 ) //创建socket
printf( “socket failed” );
/* 设置端口快速重用*/
optval = 1;
if ( setsockopt(sockfd, sol_socket, so_reuseaddr, (void *)&optval, sizeof(int)) < 0 )
printf( “setsockopt failed” );
server_addr.sin_family = af_inet;
server_addr.sin_port = htons( port );
server_addr.sin_addr.s_addr = htonl( inaddr_any );
if ( bind(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) < 0 ) //绑定ip和端口号
printf( “bind failed” );
if ( listen(sockfd, max_listen) < 0 ) //建立监听
printf( “listen failed” );
3.3.2对客户端的发送信息进行处理
while ( 1 ) {
if ( (connfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_size)) < 0 ) //响应客户端请求
printf( “accept failed” );
printf( “server accept a client: ip = %sn”,inet_ntoa(client_addr.sin_addr) ); //打印客户端ip
/* 创建子进程处理客户端请求 */
if ( (pid = fork()) == 0 ) {
while ( 1 ) {
/* 接受客户端信息 */
if ( (recv_bits = recv(connfd, buffer, buf_size, 0)) < 0 )
printf( “recv failed” );
/* 去除最后一个字符 */
buffer[recv_bits – 1] = ‘