📄 server.c
字号:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h> #include <sys/wait.h>#define C2_LEN 20
int main()
{ char ch1[C2_LEN],ch2[C2_LEN]={'0','0','0','0','0','0','0',0};
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_un server_address;
struct sockaddr_un client_address;
unlink("server_socket");
/*如果存在同名的套接口,则先删除*/
if((server_sockfd=socket(AF_UNIX,SOCK_STREAM,0))==-1)
{ /*错误检测 */
perror("socket");
exit(1);
}
/*以上建立套接口,这时候无名*/
server_address.sun_family=AF_UNIX;
strcpy(server_address.sun_path,"server_socket");
server_len=sizeof(server_address);
if(bind(server_sockfd,(struct sockaddr *)&server_address,server_len)==-1)
{/*错误检测*/
perror("bind");
exit(1);
}
if(listen(server_sockfd,5))
{/*错误检测*/
perror("listen");
exit(1);
}
/*以上创建监听队列.等待用户的连接请求*/
while(1)
{ printf("input Data you want to send:");
scanf("%s",&ch1);if(strcmp(ch1,ch2)==0)continue;strcpy(ch2,ch1);
printf("server waiting\n");
if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len))==-1)
{
perror("accept");
continue;
}
/*以上接受一个客户的请求*/
//read(client_sockfd,&ch,1);
/*因为连接一旦建立,客户就会先发消息过来,所以服务器先读*/
//write(client_sockfd,&ch,1);
/*把读取的字符串做简单处理,回送*/
//close(client_sockfd);
pid_t pid = fork();
if (pid == 0)
{ /* 子进程代码段 */
if (write(client_sockfd,&ch1,C2_LEN)== -1)
{
perror("write");
close(client_sockfd);
}
exit(0);
}
else
{/* 父进程代码 */
close(client_sockfd); /* 父进程不再需要该socket */
pid_t pid2 = waitpid(-1,NULL,WNOHANG); /*等待子进程结束,清除子进程所占用资源 */
if(pid2 > 0)
{
printf("child %d terminated \n",pid2);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -