我是 c 编程的新手,我目前正在尝试理解网络编程的概念。我试图在 Kali linux(基于 Debian 的 linux 系统)上运行一个简单的服务器代码,但是有很多我无法调试的错误。请看看我的代码。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <stdlib.h>
#define SA struct sockaddr
#define MAXLINE 4096
int main(int argc,int **argv)
{
int roockfd,confd;
socklen_t len;
struct sockaddr_in servaddr,cliaddr;
char buff[MAXLINE];
time_t ticks;
roockfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
Bind(roockfd,(SA*)&servaddr,sizeof(servaddr));
Listen(roockfd,5);
for(; ;)
{
len=sizeof(cliaddr);
confd= Accept(roockfd,(SA*)&cliaddr,&len);
printf("Connection from %s, port %d\n",
Inet_ntop(AF_INET,&cliaddr.sin_addr,buff,sizeof(buff)),
ntohs(cliaddr.sin_port));
ticks=time(NULL);
snprintf(buff,sizeof(buff),"%.24s\r\n", ctime(ticks));
printf(confd,buff,strlen(buff));
close(confd);
}
}
Run Code Online (Sandbox Code Playgroud)
等待您的宝贵答复。
有几个错误:
bzero
,请包含#include <strings.h>
在文件中。请注意,这bzero
是 BSD 中使用的过时函数,您应该考虑使用它memset(&servaddr, 0, sizeof(servaddr))
。Bind
, Listen
,Inet_ntop
和Accept
不是标准的套接字函数,或者你错误地将它们大写,如果是这种情况,请更改为bind
, listen
,inet_ntop
和accept
。或者它们是套接字接口的自定义包装器,如果是这种情况,请在文件中包含相应的头文件。 归档时间: |
|
查看次数: |
10690 次 |
最近记录: |