【网络编程】——windows socket 编程

测试demo

 1 #include <winsock2.h>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 #if 0
 6 #define TCP
 7 #else
 8 #define UDP
 9 #endif
10 
11 #pragma comment(lib, "ws2_32.lib")
12 char *ip = "10.8.2.60";
13 #ifdef UDP
14 short port = 1025;
15 #endif
16 #ifdef TCP
17 short port = 2222;
18 #endif
19 SOCKET fd;
20 
21 int init(void) {
22     WSADATA wsaData;
23     int nRet;
24     if((nRet = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0){
25         printf("WSAStartup failed!\n");
26         exit(0);
27     }
28 }
29 
30 int init_socket(void){
31     SOCKADDR_IN local;
32 #ifdef UDP
33     if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
34 #endif
35 #ifdef TCP
36     if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1){
37 #endif
38         printf("%d\n", WSAGetLastError());
39         perror("socket");
40         //getchar();
41         return -1;
42     }
43 
44     printf("fd:%d start......\n", fd);
45 
46     local.sin_family = AF_INET;
47     local.sin_port = htons((short)port);
48     local.sin_addr.s_addr = inet_addr(ip);
49     //local.sin_addr.S_un.S_addr = inet_addr(ip);
50 
51     if (bind(fd, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR) {
52         printf("reason %d ", WSAGetLastError());
53         printf("bind failed!\n");
54         getchar();
55         return -1;
56     }
57 
58 #ifdef TCP
59     if (listen(fd, 10) == -1){
60         perror("listen");
61         return -1;
62     }
63 #endif
64     return 0;
65 }
66 
67 int main(int argc, char *argv[]) {
68     char buffer[2048];
69     int size;
70     SOCKADDR_IN from;
71     int addrlen = sizeof(from);
72     SOCKET client;
73     unsigned int index = 0;
74 
75     init();
76     if (init_socket()) {
77         //printf("init socket error!\n");
78         return -1;
79     }
80 
81     while (1){
82         index++;
83 #ifdef UDP
84         size = recvfrom(fd, buffer, sizeof(buffer), 0, NULL, NULL);
85         printf("recvfrom:%d index:%u\n", size, index);
86 #endif
87 #ifdef TCP
88         if ((client = accept(fd, (SOCKADDR *)&from, &addrlen)) == -1){
89             perror("accept");
90             return -1;
91         }
92         size = recv(client, buffer, sizeof(buffer), 0);
93         printf("recv:%d\n", size);
94 #endif
95     }
96 
97     getchar();
98     return 0;
99 }

 以上是 server 端,一下是 client 端:

 1 #include <winsock2.h>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 
 6 #if 0
 7 #define UDP
 8 #else
 9 #define TCP
10 #endif
11 
12 #pragma comment(lib, "ws2_32.lib")
13 char *ip = "10.8.2.56";
14 
15 #ifdef UDP
16 short port = 1025;
17 #else
18 short port = 2222;
19 #endif
20 
21 SOCKET fd;
22 
23 int init(void) {
24     WSADATA wsaData;
25     int nRet;
26     if((nRet = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0){
27         printf("WSAStartup failed!\n");
28         exit(0);
29     }
30 }
31 
32 int init_socket(void){
33 
34 
35 #ifdef UDP
36     if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
37 #else
38     SOCKADDR_IN local;
39     if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1){
40 #endif
41         printf("%d\n", WSAGetLastError());
42         perror("socket");
43         //getchar();
44         return -1;
45     }
46 
47 #ifdef TCP
48     
49     local.sin_family = AF_INET;
50     local.sin_port = htons(port);
51     local.sin_addr.S_un.S_addr = inet_addr(ip);
52 
53     if (connect(fd, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR) {
54         printf("connect error!\n");
55         perror("connect");
56         return -1;
57     }
58 #endif
59     printf("fd:%d start......\n", fd);
60 
61     return 0;
62 }
63 
64 int main(int argc, char *argv[]) {
65     char buffer[512];
66     int size;
67     int result = 0;
68     unsigned int index = 0;
69 
70     init();
71 
72     if (init_socket()){
73         return -1;
74     }
75 
76 #ifdef UDP
77     SOCKADDR_IN sin;
78     int addrlen = sizeof(sin);
79     sin.sin_family = AF_INET;
80     sin.sin_port = htons(port);
81     sin.sin_addr.s_addr = inet_addr(ip);
82 #endif
83 
84     memset(buffer, 1, sizeof(buffer));
85     while (1) {
86 #ifdef UDP
87         result = sendto(fd, buffer, sizeof(buffer), 0, (SOCKADDR *)&sin, addrlen);
88 #else
89         result = send(fd, buffer, sizeof(buffer), 0);
90 #endif
91         printf("result:%d, index:%d\n", result, index);
92         getchar();
93         index++;
94     }
95     
96     return 0;
97 }

 

你可能感兴趣的:(【网络编程】——windows socket 编程)