我想编程,以便在客户端断开连接时,服务器将准备好接受来自客户端的新请求。下面是Linux上的C网络服务器编程
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 100
#define LISTENQ 10
int main()
{
int tmp, listenfd, connfd;
int sin_size;
struct sockaddr_in servaddr, cliaddr;
char buff[MAXLINE];
time_t ticks;
while(true)
{
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(13);
memset(&(servaddr.sin_zero),'\0',8);
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if(listenfd == -1){
perror("error socket");
exit(1);
}
tmp=bind(listenfd, (struct sockaddr *)&servaddr, sizeof(struct sockaddr));
if(tmp == -1){
perror("error bind..");
exit(1);
}
tmp=listen(listenfd, LISTENQ);
if(tmp == -1){
perror("error listen");
exit(1);
}
sin_size = sizeof(struct sockaddr_in);
connfd=accept(listenfd,(struct sockaddr *)&cliaddr, &sin_size);
if(connfd == -1){
perror("error accept");
exit(1);
}
ticks = time(NULL);
snprintf(buff,sizeof(buff),"Now Time: %.24s\r\n", ctime(&ticks));
write(connfd, buff, strlen(buff));
close(connfd);
close(listenfd);
}
}
我发现了一个问题,该部件
tmp=bind(listenfd, (struct sockaddr *)&servaddr, sizeof(struct sockaddr));
错误的代码:从 '诠释*' 到 'socklen_t的* {又名无符号整型*}'[-fpermissive]
无效的转换connfd=accept(listenfd,(struct sockaddr *)&cliaddr, &sin_size);
错误:初始化的参数3 'INT接受(INT,sockaddr的*中,socklen_t *)'[-fpermissive]
什我应该怎么处理这些问题?指针不对吗?
这是一个非常易于理解的错误信息运行。 – Geoffroy
将'sin_size'声明为'socklen_t'。另外,请记住'#include' –
user4815162342
@ user4815162342你的意思是将sin_size声明为socklen_t像这样“int sin_size socklen_t”? – greenthunder