|
小弟今天第一天学linux编程
结果书上一个简单的例程就通不过,这是一个简单的服务器的例子
下面是源代码
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#define SERVER_PORT 8003
void send_seq(int sockfd,int *data,int num_bytes)
{
int net_data;
net_data=htons(*data);
write(sockfd,&net_data,num_bytes);
}
main()
{
int sockfd;
int connfd;
int seq_data;
int namelen;
struct sockaddr_in *server_addr;
//创建流式套接字
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
fprint(stderr,"socket error!\n");
exit(1);
}
server_addr->sin_family=AF_INET;
server_addr->sin_addr.s_addr=INADDR_ANY;
server_addr->sin_port=htons(SERVER_PORT);
//将创建的套接字绑定在指定的端口上
if(bind(sockfd,&server_addr,sizeof(server_addr))<0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~大概是这里的参数有问题
{
fprint(stderr,"bind error!\n");
exit(2);
}
//建立长度为2的监听队列,从套接字上收听连接请求
if(listen(sockfd,2)<0)
{
fprintf(stderr,"listen error!\n");
exit(3);
}
namelen=sizeof(server_addr);
if((connfd=accept(sockfd,&server_addr,&namelen))<0)
{
fprintf(stderr,"accept error!\n");
exit(4);
}
//此时连接已建立,可以进行通信
for(seq_data=1;seq_data<=100;seq_data++)
{
send_seq(connfd,&seq_data,sizeof(int));
}
close(connfd);
}
出错信息如下:
server.c: In function `main':
server.c:37: warning: passing arg 2 of `bind' from incompatible pointer type
server.c:49: warning: passing arg 2 of `accept' from incompatible pointer type
/tmp/cc8FJH8f.o(.text+0x6f): In function `main':
: undefined reference to `fprint'
/tmp/cc8FJH8f.o(.text+0xd0): In function `main':
: undefined reference to `fprint'
collect2: ld returned 1 exit status
大概是bind和accept两个函数的参数有问题
我实在看不出来,请大虾赐教。 |
|