本文编写了一个初步的简单的回射服务器例子。基本内容书上都能找到,认真看书就行了,所以尽量讲一些自己认为应该注意的地方。
功能:
客户端从标准输入读入一行文本,写给服务器;服务器读入这行文本,并回射给客户端;客户端读入这行回射文本,显示在标准输出上。
思路:
编写的服务器是一个并发服务器,所以当连接到来时,会fork一个子进程来对客户请求进行处理。其他部分就按简单的客户-服务器通信的步骤来写就行,客户端:socket()--->connect()--->处理函数;服务器:socket()--->bind()--->listen()--->accept()--->处理函数
程序如下:
服务器:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
//出错函数
#define err_exit(m)\
{\
perror(m);\
exit(EXIT_FAILURE);\
}
//最大连接数
#define LISTENQ 1024
//服务器端口号
#define SERV_PORT 9877
//接收和发送的缓冲区大小
#define BUFSIZE 4096
//处理客户端请求函数
void str_echo(int confd);
int main(int argc, char **argv)
{
int confd, listenfd;
struct sockaddr_in cliaddr, servaddr;
pid_t childpid;
socklen_t clilen;
int status;
char buff[BUFSIZE];
//设置协议地址结构内容
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
listenfd = socket(AF_INET, SOCK_STREAM, 0);//创