文档介绍:并发服务器编程
实验内容
使用 socket相关技术,编写一个简单的并发服务器。
服务端等待客户连接,连接成功以后向客户端发送欢迎信息;接着接收该客户端的名字并显示;然后接收来自客户端的信息,将该字符串反转,并将结果送回客户。要求服务器具有同时处理多个客户的能力。
客户端首先与服务器连接,接收用户输入客户的名字,将改名字发送给服务器;接着接收用户输入的字符串,并发送给服务器;然后接收服务器返回的经处理后的字符串,并显示之。当用户输入Ctrl+C时终止连接并退出。
源代码
#include <>
#include <sys/>
#include <sys/>
#include <>
#include </>
#include <arpa/>
#include <>
#include <>
#include <>
#include <>
#include <>
#define MAXCHARSIZE 100
#define PORT 1234
#define BACKLOG 2
void process_client(int connectfd,struct sockaddr_in client);
int main(void)
{
int listenfd,connectfd;
struct sockaddr_in server,client;
int sin_size;
int opt=SO_REUSEADDR;
pid_t pid;
if((listenfd=socket(,SOCK_STREAM,0))==-1)
{
perror("创建套接字失败");
exit(0);
}
//初始化地址结构
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bzero(&server,sizeof(server));
=;
=htons(PORT);
=htonl(INADDR_ANY);
//绑定地址
if(bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1)
{
perror("绑定失败");
exit(0);
}
if(listen(listenfd,BACKLOG)==-1)
{
perror("监听失败");
exit(-1);
}
sin_size=sizeof(struct sockaddr_in);
while(1)
{
//接收
if((connectfd=accept(listenfd,(struct sockaddr *)&client,&sin_size))==-1)
{
perror("接收数据失败");
exit(-1);
}
if((pid=fo