網絡編程(windows socket編程)


TCP服務器端代碼:

 1 // TcpSrv.cpp: 定義控制台應用程序的入口點。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<Windows.h>
 6 #pragma comment(lib,"ws2_32.lib") 
 7 
 8 int main()
 9 {
10     //************加載套接字庫*****************
11     WORD wVersionRequested;
12     WSADATA wsaData;
13     int err;
14 
15     wVersionRequested = MAKEWORD(2,2);//Winsock庫版本,低字節代表主版本,高字節代表副版本
16     err = WSAStartup(wVersionRequested, &wsaData);
17     if (err != 0)
18     {
19         return false;
20     }
21     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
22     {
23         WSACleanup();//終止對winsock庫的使用
24         return false;
25     }
26 
27     //***********創建套接字********************
28 
29     //parameter int af:指定協議族,即網際域,Windows平台總是AF_INET或TF_INET
30     //parameter int type:套接字類型
31     //parameter int protocal:協議類型,一般設為0,自動設置
32     SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
33 
34     //************綁定到本機地址和端口***********
35     SOCKADDR_IN addrSrv;//本機地址結構體信息,除了sin_family,其它字段都需要采用網絡字節序
36     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//htonl轉換為網絡字節序,轉換的是u_long類型
37     addrSrv.sin_family = AF_INET;
38     addrSrv.sin_port = htons(6000);//htons轉換為網絡字節序,轉換的是u_short類型
39 
40     //綁定,由於第二個參數會隨網絡協議的不同而變化,所以第三個參數指定地址結構的長度
41     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
42 
43     //*************監聽************************
44     listen(sockSrv,5);//5表示連接隊列
45 
46     while (1)
47     {
48         SOCKADDR_IN addrClient;//用於接收客戶端的地址信息
49         int len = sizeof(SOCKADDR);//這個參數必須初始化
50 
51         //*************建立連接************************
52         //接受客戶端的連接,返回一個新的套接字。之前的套接字sockSrv依然用於監聽
53         SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
54 
55         //*************發送數據************************
56         char sendBuf[100];
57         //inet_ntoa表示將網絡用的ip地址轉換為點分十進制的形式,並返回成字符串  
58         //inet_addr將點分十進制地址轉換為一個無符號整形表示形式
59         sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
60 
61         send(sockConn, sendBuf, strlen(sendBuf) + 1,0);
62 
63         //*************接收數據************************
64         char recvBuf[100];
65         recv(sockConn,recvBuf,100,0);
66         printf("%s",recvBuf);
67 
68         //*************關閉套接字**********************
69         closesocket(sockConn);
70     }
71     // 退出while循環后,關閉sockSrv以及清理套接字即可
72 
73     return 0;
74 }
View Code

TCP客戶端端代碼:

 1 // TcpClient.cpp: 定義控制台應用程序的入口點。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<Winsock2.h>
 6 #pragma comment(lib,"ws2_32.lib") 
 7 int main()
 8 {
 9     //************加載套接字庫*****************
10     WORD wVersionRequested;
11     WSADATA wsaData;
12     int err;
13     wVersionRequested = MAKEWORD(2,2);
14     err = WSAStartup(wVersionRequested,&wsaData);
15     if (err != 0)
16     {
17         return false;
18     }
19     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
20     {
21         WSACleanup();
22         return false;
23     }
24 
25     //***********創建套接字********************
26     SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
27 
28     //************連接服務器*******************
29     SOCKADDR_IN addrSrv;
30     addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
31     addrSrv.sin_family = AF_INET;
32     addrSrv.sin_port = htons(6000);
33     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
34 
35     //************接收數據*********************
36     char recvBuf[100];
37     recv(sockClient,recvBuf,100,0);
38     printf("%s\n",recvBuf);
39     //************發送數據*********************
40     send(sockClient,"This is Client",strlen("This is Client")+1,0);
41 
42     closesocket(sockClient);//關閉套接字  
43     WSACleanup();//終止套接字庫的使用
44 
45     system("pause");
46     return 0;
47 }
View Code

 UDP服務端代碼:

 1 // udpSrv.cpp: 定義控制台應用程序的入口點。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<WinSock2.h>
 6 #pragma comment(lib, "ws2_32.lib")
 7 int main()
 8 {
 9     //*************加載套接字庫***************
10     WORD wVersionRequested;
11     WSADATA wsaData;
12     int err;
13 
14     wVersionRequested = MAKEWORD(2, 2);
15     err = WSAStartup(wVersionRequested,&wsaData);
16 
17     if (err != 0)
18     {
19         return false;
20     }
21     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
22     {
23         return false;
24         WSACleanup();
25     }
26 
27     //*************創建套接字***************
28     SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);
29 
30     //*************綁定到地址結構上***************
31     SOCKADDR_IN addrSrv;
32     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
33     addrSrv.sin_family = AF_INET;
34     addrSrv.sin_port = htons(6000);
35 
36     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
37 
38     //*************接收********************
39     SOCKADDR_IN addrClient;
40     int len = sizeof(SOCKADDR);
41     char recvBuf[100];
42     recvfrom(sockSrv, recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
43     printf("%s\n", recvBuf);
44 
45     //*************關閉套接字***************
46     closesocket(sockSrv);
47     WSACleanup();
48 
49     system("pause");
50     return 0;
51 }
View Code

 UDP客戶端代碼:

 1 // udpClient.cpp: 定義控制台應用程序的入口點。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<WinSock2.h>
 6 #pragma comment(lib, "ws2_32.lib")
 7 
 8 int main()
 9 {
10     //*************加載套接字庫***************
11     WORD wVersionRequested;
12     WSADATA wsaData;
13     int err;
14 
15     wVersionRequested = MAKEWORD(2, 2);
16     err = WSAStartup(wVersionRequested, &wsaData);
17 
18     if (err != 0)
19     {
20         return false;
21     }
22     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
23     {
24         return false;
25         WSACleanup();
26     }
27     //****************創建套接字***********************
28     SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
29 
30     //****************發送數據***********************
31     SOCKADDR_IN addrSrv;
32     addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
33     addrSrv.sin_family = AF_INET;
34     addrSrv.sin_port = htons(6000);
35     int len = sizeof(SOCKADDR);
36 
37     sendto(sockClient,"hello",sizeof("hello")+1,0,(SOCKADDR*)&addrSrv,len);
38 
39     //****************關閉套接字***********************
40     closesocket(sockClient);
41     WSACleanup();
42 
43     system("pause");
44     return 0;
45 }
View Code

 


免責聲明!

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



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