?? 7_processserver.txt
字號:
#include <stdio.h>
#include <srtings.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet.h>
#include <arpa/inet.h>
#define PORT 1234
#define BACKLOG 2
#define MAXDATASIZE 1000
void process_cli(int connectfd,sockaddr_in client);
main()
{ int listenfd,connectfd;
pid_t pid;
struct sockaddr_in server;
struct sockaddr_in client;
int sin_size;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("creating socket failed.");
exit(1);
}
int opt=SO_REUSEADDR;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(listenfd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1){
perror("bind error.");
exit(1);
}
if(listen(listenfd,BACKLOG)==-1){
perror("listen() error.\n");
exit(1);
}
sin_size=sizeof(struct sockaddr_in);
while(1)
{ if((connectfd=accept(listenfd,(struct sockaddr *)&client,&sin_size))==-1){
perror("accept() error\n");
exit(1);
}
if((pid=fork())>0){
close(connectfd);
continue;
}
else if(pid==0){
close(listenfd);
process_cli(connectfd,client);
exit(0);
}
else {
printf("fork error.\n");
exit(0);
}
}
close(listenfd);
}
void process_cli(int connectfd,sockaddr_in client)
{ int num;
char recvbuf[MAXDATASIZE],sendbuf[MAXDATASIZE],cli_name[MAXDATASIZE];
printf("you got a connection from %s.",inet_ntoa(client,sin_addr));
num=recv(connectfd,cli_name,MAXDATASIZE,0);
if(num==0){
close(connectfd);
printf("client disconnected.\n");
return;
}
cli_name[num-1]='\0';
printf("client's name is %s.",cli_name);
while(num=recv(connectfd,recvbuf,MAXDATASIZE,0)){
recvbuf[num]='\0';
printf("received client (%s) message:%s",cli_name,recvbuf);
for(i=0,i<num-1,i++){
sendbuf[i]=recvbuf[num-i-2];
}
sendbuf[num-1]='\0';
send(connectfd,sendbuf,strlen(sendbuf),0);
}
close(connectfd);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -