學無止境,最近學習了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);
- }