socket基础知识

windows环境下的基础代码:

复制代码
  1 // server.cpp
  2 #include <stdio.h>
  3 #include <winsock.h>
  4 #pragma comment(lib, "ws2_32.lib")
  5 
  6 int main()
  7 {
  8     // 初始化DLL
  9     WSADATA wsaData;
 10     WSAStartup(MAKEWORD(2, 2), &wsaData);
 11 
 12     printf("wVersion: %d.%d\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
 13     printf("wHighVersion: %d.%d\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
 14     printf("szDescription: %s\n", wsaData.szDescription);
 15     printf("szSystemStatus: %s\n", wsaData.szSystemStatus);
 16 
 17     // 创建套接字
 18     SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 19 
 20     // 绑定套接字
 21     struct sockaddr_in sockAddr;
 22     memset(&sockAddr, 0, sizeof(sockAddr));
 23     sockAddr.sin_family = PF_INET;
 24     sockAddr.sin_addr.s_addr = inet_addr("192.168.182.1");
 25     sockAddr.sin_port = htons(1234);
 26     bind(servSock, (SOCKADDR*)(&sockAddr), sizeof(SOCKADDR));
 27 
 28     // 进入监听状态
 29     listen(servSock, 20);
 30 
 31     // 接收客户端请求
 32     SOCKADDR clntAddr;
 33     int nSize = sizeof(SOCKADDR);
 34     SOCKET clntSock = accept(servSock, (SOCKADDR*)(&clntAddr), &nSize);
 35 
 36     // 向客户端发送数据
 37     const char* str = "Hello world!";
 38     send(clntSock, str, strlen(str) + sizeof(char), NULL);
 39 
 40     // 关闭套接字
 41     closesocket(clntSock);
 42     closesocket(servSock);
 43 
 44     // 终止DLL
 45     WSACleanup();
 46 
 47     return 0;
 48 }
 49 
 50 
 51 
 52 
 53 
 54 // clent.cpp
 55 #include <stdio.h>
 56 #include <stdlib.h>
 57 #include <WinSock2.h>
 58 
 59 #pragma comment(lib, "ws2_32.lib")
 60 
 61 int main()
 62 {
 63     // 初始化DLL
 64     WSADATA wsaData;
 65     WSAStartup(MAKEWORD(2, 2), &wsaData);
 66 
 67     printf("wVersion: %d.%d\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
 68     printf("wHighVersion: %d.%d\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
 69     printf("szDescription: %s\n", wsaData.szDescription);
 70     printf("szSystemStatus: %s\n", wsaData.szSystemStatus);
 71 
 72     // 通过域名获取ip
 73     struct hostent* host = gethostbyname("www.yanzhihui.com");
 74     if (!host) {
 75         printf("Failed to get ip address!");
 76         // 终止DLL
 77         WSACleanup();
 78         return -1;
 79     }
 80 
 81     //别名
 82     for (int i = 0; host->h_aliases[i]; i++) {
 83         printf("Aliases %d: %s\n", i + 1, host->h_aliases[i]);
 84     }
 85 
 86     //地址类型
 87     printf("Address type: %s\n", (host->h_addrtype == AF_INET) ? "AF_INET" : "AF_INET6");
 88 
 89     //IP地址
 90     for (int i = 0; host->h_addr_list[i]; i++) {
 91         printf("IP addr %d: %s\n", i + 1, inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
 92     }
 93 
 94     // 创建套接字
 95     SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 96 
 97     // 绑定套接字
 98     struct sockaddr_in sockAddr;
 99     memset(&sockAddr, 0, sizeof(sockAddr));
100     sockAddr.sin_family = PF_INET;
101     sockAddr.sin_addr.s_addr = inet_addr("192.168.182.128");
102     //sockAddr.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr*)host->h_addr_list[0]));
103     sockAddr.sin_port = htons(1234);
104     connect(sock, (SOCKADDR*)(&sockAddr), sizeof(SOCKADDR));
105 
106     // 接收服务器传回的数据
107     char szBuffer[MAXBYTE] = { 0 };
108     recv(sock, szBuffer, MAXBYTE, NULL);
109 
110     printf("Message from server: %s\n", szBuffer);
111 
112     // 关闭套接字
113     closesocket(sock);
114 
115     // 终止DLL
116     WSACleanup();
117 
118     system("pause");
119 
120     return 0;
121 }
复制代码

 

linux环境下的基础代码:

复制代码
  1 // server.cpp
  2 #include <stdio.h>
  3 #include <string.h>
  4 #include <stdlib.h>
  5 #include <unistd.h>
  6 #include <arpa/inet.h>
  7 #include <sys/socket.h>
  8 #include <netinet/in.h>
  9 #include <netdb.h>
 10 
 11 int main()
 12 {
 13     // 创建套接字
 14     int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 15 
 16     // 通过域名获取ip
 17     struct hostent *host = gethostbyname("www.yanzhihui.com");
 18     if(!host){
 19         printf("Failed to get ip address!");
 20         return -1;
 21     }
 22 
 23     // 别名
 24     for(int i = 0; host->h_aliases[i]; i++){
 25         printf("Aliases %d: %s\n", i+1, host->h_aliases[i]);
 26     }
 27     
 28     // 地址类型
 29     printf("Address type: %s\n", (host->h_addrtype == AF_INET) ? "AF_INET" : "AF_INET6");
 30 
 31     // IP地址
 32     for(int i = 0; host->h_addr_list[i]; ++i)
 33     {
 34         printf("ip addr %d: %s\n", i+1, inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
 35     }
 36 
 37     // 将套接字绑定到指定IP、端口 
 38     struct sockaddr_in serv_addr;
 39     memset(&serv_addr, 0, sizeof(serv_addr));
 40     serv_addr.sin_family = AF_INET;
 41     serv_addr.sin_addr.s_addr = inet_addr("192.168.182.128");
 42     //serv_addr.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr*)host->h_addr_list[0]));
 43     serv_addr.sin_port = htons(1234);
 44     bind(serv_sock, (struct sockaddr*)(&serv_addr), sizeof(serv_addr));
 45 
 46     // 进入监听状态,等待用户发起请求
 47     listen(serv_sock, 20);
 48 
 49     // 接受客户端请求
 50     struct sockaddr_in clnt_addr;
 51     socklen_t clnt_addr_size = sizeof(clnt_addr);
 52     int clnt_sock = accept(serv_sock, (struct sockaddr*)(&clnt_addr), &clnt_addr_size);
 53 
 54     // 向客户端发送数据
 55     char str[] = "Hello World";
 56     write(clnt_sock, str, sizeof(str));
 57 
 58     // 关闭套接字
 59     close(clnt_sock);
 60     close(serv_sock);
 61 
 62     return 0;
 63 }
 64 
 65 
 66 
 67 
 68 
 69 
 70 // client.cpp
 71 #include <stdio.h>
 72 #include <string.h>
 73 #include <stdlib.h>
 74 #include <unistd.h>
 75 #include <arpa/inet.h>
 76 #include <sys/socket.h>
 77 
 78 int main()
 79 {
 80     // 创建套接字
 81     int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 82 
 83     // 将套接字绑定到指定IP、端口 
 84     struct sockaddr_in serv_addr;
 85     memset(&serv_addr, 0, sizeof(serv_addr));
 86     serv_addr.sin_family = AF_INET;
 87     serv_addr.sin_addr.s_addr = inet_addr("192.168.182.1");
 88     serv_addr.sin_port = htons(1234);
 89     connect(sock, (struct sockaddr*)(&serv_addr), sizeof(serv_addr));
 90 
 91     // 读取服务器传回的消息
 92     char buffer[40];
 93     read(sock, buffer, sizeof(buffer) - 1);
 94 
 95     printf("Message from server: %s\n", buffer);
 96     // 关闭套接字
 97     close(sock);
 98 
 99     return 0;
100 }
复制代码

 

  禅元天道  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示