[code="java"] #include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333
#define BACKLOG 10
main(){
int sockfd,client_fd;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket create erro");
exit(1);
}
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_family=AF_INET;
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1){
perror("bind error");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1){
perror("lister error");
exit(1);
}
}
while(1) {//在这里报错service.c:39
int sin_size=sizeof(struct sockaddr_in);
if((client_fd=accrpt(sockfd,(struct sockaddr *)$remote_addr,$sin_addr))==-1){
perror("accept error");
continue;
}
printf("received a connection from %s\n",inet_ntoa(remote_addr.sin_addr));
if(!fork()){
if(send(clint_fd,"hello qiao ",11,0)==-1){
perror("send error");
close(client_fd);
exit(0);
}
close(client_fd);
}
}[/code]
service.c:39: 错误:expected identifier or ‘(’ before ‘while’
[b]问题补充:[/b]
上面的代码是用vi写的,能推荐一个linux下编写c的工具吗????
[b]问题补充:[/b]
我已经2年没有搞c了,毕业了直接搞java开发,现在公司要我搞linux c开发,有点不习惯,看不惯c的结构.我比较喜欢java和动态语言的,
如果你担心自己总是在配对的花括号上犯错误的话,可以用这样的代码风格:
[code="c"]int main() {
while (1) {
printf("foo");
} // while
} // main[/code]
每写一个左花括号就先写出配对的右花括号,并且标识出配对关系,然后再填充里面的内容。
当然能熟练的应付花括号的配对之后就不必这么做了……或者像Source Insight之类的工具也会自动给你显示出配对关系的,显示效果就像自己加了这些标识用的注释一样。
39行那个错误是因为while前面多了个}而整个while之后又少了一个}……这代码的缩进这么糟糕,也难怪你会看不出来的。
没仔细看,不过或许你要写的是这样的?
[code="c"]#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333
#define BACKLOG 10
int main() {
int sockfd, client_fd;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket create error");
exit(1);
}
my_addr.sin_port = htons(SERVPORT);
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), 8);
if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) < 0) {
perror("bind error");
exit(1);
}
if(listen(sockfd, BACKLOG) < 0) {
perror("lister error");
exit(1);
}
while(1) {
int sin_size = sizeof(struct sockaddr_in);
if((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, sin_size)) < 0) {
perror("accept error");
continue;
}
printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
if (!fork()) {
if(send(clint_fd,"hello qiao ", 11, 0) < 0){
perror("send error");
close(client_fd);
exit(0);
}
close(client_fd);
}
}
}[/code]
vi不好么……我觉得vi/vim很好用啊。或者用emacs?