学无止境,最近学习了C++手册的一些知识,写了二段代码.希望有人来点评,指出其中的错误,或需要改进的地点.在写的过程当中,遇到很多问题,不段的问人,在贴求助。
查看C++手册,查看网上教程才得以写出. 但C++的许多基础知识我还是不懂.并不段的在学习. 由于工作繁忙,学习进度实在是小得可怜,发了很多C++语言的基础.在那里我学到了许多知识. 如果打算学习C++手册的成员们就一起吧。
- #include <stdlib.h>
- #include <stdio.h>
- #include <errno.h>
- #include <string.h>
- #include <netdb.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <syslog.h>
- #include <unistd.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <errno.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- /*建立精灵进程*/
- int daemon_init(void)
- { pid_t pid;
- if((pid = fork()) < 0) return(-1);
- else if(pid != 0) exit(0); /* parent exit */
- /* child continues */
- setsid(); /* become session leader */
- chdir("//tmp"); /* change working directory */
- umask(0); /* clear file mode creation mask */
- close(0); /* close stdin */
- close(1); /* close stdout */
- close(2); /* close stderr */
- return(0); }
- /*读取文件数据*/
- void myread(char *buff)
- {
- char buf[1024];
- FILE *fp;
- fp = fopen("/proc/net/dev", "r");
- if(!fp)
- {
- perror("fopen");
- exit(2);
- }
- fgets(buf, 1024, fp);
- fgets(buf, 1024, fp);
- fgets(buf, 1024, fp);
- fgets(buf, 1024, fp);
- fscanf(fp, "%s", buf); /*从第三行开始读*/
- snprintf(buff, 100, "%s", buf);
- fclose(fp);
- printf("%s\n", buf);
- }
- int main(int argc, char *argv[])
- {
- int sockfd,new_fd;
- struct sockaddr_in server_addr;
- struct sockaddr_in client_addr;
- int sin_size,portnumber;
- char hello[1024];
- /* 服务器端开始建立socket描述符 */
- if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
- {
- printf("Socket error:%s\n\a",strerror(errno));
- exit(1);
- }
- /* 服务器端填充 sockaddr_in结构 */
- bzero(&server_addr,sizeof(struct sockaddr_in));
- server_addr.sin_family=AF_INET;
- server_addr.sin_addr.s_addr=inet_addr("本机IP");
- server_addr.sin_port=htons(10240); /*端口号转换为网络字节序*/
- /* 捆绑sockfd描述符 */
- if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==
- -1)
- {
- printf("Bind error:%s\n\a",strerror(errno));
- exit(1);
- }
- /* 监听sockfd描述符 */
- if(listen(sockfd,5)==-1) /*5为请求队列的***请求数*/
- {
- printf("Listen error:%s\n\a",strerror(errno));
- exit(1);
- }
- while(1)
- {
- /* 服务器阻塞,直到客户程序建立连接 */
- sin_size=sizeof(struct sockaddr_in);
- if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size
- ))==-1)
- {
- printf("Accept error:%s\n\a",strerror(errno));
- exit(1);
- }
- /*inet_ntoa的作用是将一个32位Ipv4地址转换为相应的点分十进制数串*/
- printf("Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
- /*向客户端发送hello字符数组的内容*/
- myread(hello);
- if(write(new_fd,hello,strlen(hello))==-1)
- {
- printf("Write Error:%s\n",strerror(errno));
- exit(1);
- }
- /* 这个通讯已经结束 */
- close(new_fd);
- }/* while结尾处*/
- close(sockfd);
- exit(0);
- }
【编辑推荐】