bug代碼
1 #include <iostream> 2 #include <stdio.h> 3 #include <errno.h> 4 #include <sys/types.h> 5 #include <sys/socket.h> 6 #include <netinet/in.h> 7 #include <netinet/ip.h> 8 #include <string.h> 9 10 #define handdle_error(msg)\ 11 do{perror(msg);exit(EXIT_FAILURE);}while(0) 12 13 #define BACK_LOG 10 14 #define BUF_SIZE 1024 15 int main(int argc, char** argv) 16 { 17 int sfd, cfd; 18 if (sfd = socket(AF_INET, SOCK_STREAM, 0) == -1) 19 handdle_error("create socket fail:"); 20 21 struct sockaddr_in servaddr; 22 memset(&servaddr, 0, sizeof(sockaddr_in)); 23 servaddr.sin_family = AF_INET; 24 servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 25 servaddr.sin_port = htons(6666); 26 if ((bind(sfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) == -1) 27 handdle_error("bind socket error:"); 28 29 if ((listen(sfd, BACK_LOG)) == -1) 30 handdle_error("listen socket fail:"); 31 32 char buf[BUF_SIZE]; 33 int rcv; 34 std::cout << "prepare to receive message" << std::endl; 35 while (1) 36 { 37 if ((cfd = accept(sfd, (sockaddr*)NULL, NULL)) == -1) 38 { 39 std::cout << "accept socket fail:%s(error no:%d)" << strerror(errno) << errno << std::endl; 40 continue; 41 } 42 if (rcv = recv(cfd, (void*)buf, BUF_SIZE, 0) < 0) 43 { 44 std::cout << "recv socket fail:%s(error no:%d)" << strerror(errno) << errno << std::endl; 45 continue; 46 } 47 buf[rcv] = '\0'; 48 std::cout << "receive message from client is:" << buf << std::endl; 49 } 50 return 0; 51 }
編譯OK,運行報錯

根據提示說明是第26行報錯
但是看代碼一點問題沒有
原因是socket創建sfd那里除了問題,正確寫法,見右側

這種()不匹配問題往往十分隱晦,一個好的方法是在()兩側流出空格,這樣在語法高亮器的輔助下更容易發現問題
