Linux Socket TCP通信

来源:互联网 发布:js中for in循环 编辑:程序博客网 时间:2024/05/18 22:12

注意:这里接收的网卡默认是eth0的,如果机器的网卡不是这个接收数据,则可能出现blind error!


1. Server端

[cpp] view plaincopy
  1. /*socket tcp服务器端*/  
  2. #include <sys/stat.h>  
  3. #include <fcntl.h>  
  4. #include <errno.h>  
  5. #include <netdb.h>  
  6. #include <sys/types.h>  
  7. #include <sys/socket.h>  
  8. #include <netinet/in.h>  
  9. #include <arpa/inet.h>  
  10.   
  11. #include <stdio.h>  
  12. #include <string.h>  
  13. #include <stdlib.h>  
  14. #include <unistd.h>  
  15.   
  16. #define SERVER_PORT 5555  
  17.   
  18. int main()  
  19. {  
  20.     int serverSocket;  
  21.     struct sockaddr_in server_addr;  
  22.     struct sockaddr_in clientAddr;  
  23.     int addr_len = sizeof(clientAddr);  
  24.     int client;  
  25.     char buffer[200];  
  26.     int iDataNum;  
  27.   
  28.     if((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)  
  29.     {  
  30.         perror("socket");  
  31.         return 1;  
  32.     }  
  33.   
  34.     bzero(&server_addr, sizeof(server_addr));  
  35.     server_addr.sin_family = AF_INET;  
  36.     server_addr.sin_port = htons(SERVER_PORT);  
  37.     server_addr.sin_addr.s_addr = htonl(INADDR_ANY);  
  38.     if(bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)  
  39.     {  
  40.         perror("connect");  
  41.         return 1;  
  42.     }  
  43.   
  44.     if(listen(serverSocket, 5) < 0)   
  45.     {  
  46.         perror("listen");  
  47.         return 1;  
  48.     }  
  49.   
  50.     while(1)  
  51.     {  
  52.         printf("Listening on port: %d\n", SERVER_PORT);  
  53.         client = accept(serverSocket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);  
  54.         if(client < 0)  
  55.         {  
  56.             perror("accept");  
  57.             continue;  
  58.         }  
  59.         printf("\nrecv client data...n");  
  60.         printf("IP is %s\n", inet_ntoa(clientAddr.sin_addr));  
  61.         printf("Port is %d\n", htons(clientAddr.sin_port));  
  62.         while(1)  
  63.         {  
  64.             iDataNum = recv(client, buffer, 1024, 0);  
  65.             if(iDataNum < 0)  
  66.             {  
  67.                 perror("recv");  
  68.                 continue;  
  69.             }  
  70.             buffer[iDataNum] = '\0';  
  71.             if(strcmp(buffer, "quit") == 0)  
  72.                 break;  
  73.             printf("%drecv data is %s\n", iDataNum, buffer);  
  74.             send(client, buffer, iDataNum, 0);  
  75.         }  
  76.     }  
  77.     return 0;  
  78. }  

2. client端
[cpp] view plaincopy
  1. /*socket tcp客户端*/  
  2. #include <sys/stat.h>  
  3. #include <fcntl.h>  
  4. #include <errno.h>  
  5. #include <netdb.h>  
  6. #include <sys/types.h>  
  7. #include <sys/socket.h>  
  8. #include <netinet/in.h>  
  9. #include <arpa/inet.h>  
  10.   
  11. #include <stdio.h>  
  12. #include <string.h>  
  13. #include <stdlib.h>  
  14. #include <unistd.h>  
  15.   
  16. #define SERVER_PORT 5555  
  17.   
  18. int main()  
  19. {  
  20.     int clientSocket;  
  21.     struct sockaddr_in serverAddr;  
  22.     char sendbuf[200];  
  23.     char recvbuf[200];  
  24.     int iDataNum;  
  25.     if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)  
  26.     {  
  27.         perror("socket");  
  28.         return 1;  
  29.     }  
  30.   
  31.     serverAddr.sin_family = AF_INET;  
  32.     serverAddr.sin_port = htons(SERVER_PORT);  
  33.     serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");  
  34.     if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)  
  35.     {  
  36.         perror("connect");  
  37.         return 1;  
  38.     }  
  39.   
  40.     printf("connect with destination host...\n");  
  41.   
  42.     while(1)  
  43.     {  
  44.         printf("Input your world:>");  
  45.         scanf("%s", sendbuf);  
  46.         printf("\n");  
  47.   
  48.         send(clientSocket, sendbuf, strlen(sendbuf), 0);  
  49.         if(strcmp(sendbuf, "quit") == 0)  
  50.             break;  
  51.         iDataNum = recv(clientSocket, recvbuf, 200, 0);  
  52.         recvbuf[iDataNum] = '\0';  
  53.         printf("recv data of my world is: %s\n", recvbuf);  
  54.     }  
  55.     close(clientSocket);  
  56.     return 0;  
  57. }
0 0
原创粉丝点击