linux socket連接中 ERRNO錯誤


Connection refused:應該是連接的服務端沒有啟動或者連接端口錯誤,可以用如下代碼測試

client端:

 1 #include <stdio.h>
 2 #include <sys/types.h>          /* See NOTES */
 3 #include <sys/socket.h>
 4 #include <strings.h>
 5 #include <unistd.h>
 6 #include <netinet/in.h>
 7 #include <string.h>
 8 #include <arpa/inet.h>
 9 #include <errno.h>
10 #define PORT 1234
11 #define SERVER "10.1.70.21"
12 
13 int main()
14 {
15         int fd = socket(AF_INET, SOCK_STREAM, 0);
16         int nfd;
17         int ret;
18         struct sockaddr_in server_addr, client_addr;
19         bzero(&server_addr, sizeof(server_addr));
20 
21         server_addr.sin_family =AF_INET;
22         server_addr.sin_port = htons(PORT);
23         inet_pton(AF_INET, SERVER, &server_addr.sin_addr);
24         //bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
25         errno = 0;
26         ret = connect(fd, (struct sockaddr*)&server_addr, sizeof(server_addr));
27         if(ret == -1)
28         {
29                 perror("connect: ");
30         }
31         char buf[1024];
32         while(1)
33         {
34                 bzero(buf, 1024);
35                 ret = read(STDIN_FILENO, buf, sizeof(buf));
36                 printf("ret: %d, buf: %s", ret, buf);
37                 ret = write(fd, buf, ret);
38                 printf("ret:%d\n", ret);
39                 if(ret < 0)
40                 {
41                         perror("write error");
42                 }
43                 ret = read(fd, buf, 1024);
44                 if(ret < 0)
45                 {
46                         perror("ret");
47                 }
48                 write(STDOUT_FILENO, buf, ret);
49         }
50         return 0;
51 }

 server端:

  

 1 #include <stdio.h>
 2 #include <sys/types.h>          /* See NOTES */
 3 #include <sys/socket.h>
 4 #include <strings.h>
 5 #include <unistd.h>
 6 #include <netinet/in.h>
 7 #include <string.h>
 8 #include <errno.h>
 9 //server端監聽端口
10 #define PORT 3388
11 int main()
12 {
13     int fd = socket(AF_INET, SOCK_STREAM, 0);//創建一個socket
14     int nfd;
15     struct sockaddr_in server_addr, client_addr;
16     bzero(&server_addr, sizeof(server_addr));
17     server_addr.sin_family =AF_INET; //ipv4
18     server_addr.sin_port = htons(PORT);//端口
19     server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//監聽本主機的所有ip
20 
21     bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));//綁定
22     listen(fd, 30);//監聽socket連接,30為三次握手隊列大小
23     char buf[1024];    
24     // 把server_addr.sin_addr的地址轉換成字符串(點分十進制表示)
25     inet_ntop(AF_INET, &server_addr.sin_addr, buf, sizeof(buf));
26     printf("%s\n", buf);//一般輸出為0.0.0.0
27     pid_t pid;    
28     while(1)
29     {
30         bzero(buf, sizeof(buf));//buf清零,相當於memset(buf, 0, sizeof(buf));
31 
32         socklen_t len= sizeof(client_addr);
33         nfd = accept(fd, (struct sockaddr*)&client_addr, &len);//接收socket連接
34         inet_ntop(AF_INET, &client_addr.sin_addr, buf, sizeof(buf));//獲取socket連接客戶端的ip
35         printf("accept connetc %s port %d\n", buf, ntohs(client_addr.sin_port));    
36 
37         pid = fork();
38         //子進程
39         if(pid == 0)
40         {
41             while(1)
42             {
43 
44                 int ret = read(nfd, buf, sizeof(buf));
45                 if(ret <= 0)
46                 {
47                     perror("ret");
48                     return 0;
49                 }
50                 write(STDOUT_FILENO, buf, ret);
51                 write(nfd, buf, ret);
52             }
53         }
54     }
55     return 0;
56 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM