Selectモデルによる通信プログラムの作成、コンパイル、実行
4639 ワード
タスクターゲット
Win 32プログラムシミュレーションを作成し、Selectモデルに基づく2台のコンピュータ間の通信を実現し、サーバ端とクライアント間の双方向データ転送をプログラミングすることを要求する。クライアントは、1から100までの奇数和の計算をサーバに送信し、サーバはクライアントに応答して、1から100までの奇数と結果を与える。
コアコード
Win 32プログラムシミュレーションを作成し、Selectモデルに基づく2台のコンピュータ間の通信を実現し、サーバ端とクライアント間の双方向データ転送をプログラミングすることを要求する。クライアントは、1から100までの奇数和の計算をサーバに送信し、サーバはクライアントに応答して、1から100までの奇数と結果を与える。
コアコード
Server:
1. #include "InitSock.h"
2. #include
3. #include
4. #include
5. CInitSock initSock;
6. int main(int argc, char* argv[])
7. {
8. //
9. SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
10. if(sListen == INVALID_SOCKET)
11. {
12. printf("socket error !");
13. return 0;
14. }
15.
16. // IP
17. sockaddr_in sin;
18. sin.sin_family = AF_INET;
19. sin.sin_port = htons(5555);
20. sin.sin_addr.S_un.S_addr = INADDR_ANY;
21. if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
22. {
23. printf("bind error !");
24. }
25. ::listen(sListen, 5);
26.
27. int itotal=0;
28. int ii;
29. for(ii=1;ii<=100;ii++)
30. {
31. if(ii % 2 ==1)
32. {
33. itotal+=ii;
34. }
35. }
36.
37. fd_set fdSocket;
38. FD_ZERO(&fdSocket);
39. FD_SET(sListen, &fdSocket);
40. while(true) {
41. fd_set fdRead = fdSocket;
42. int nRet = ::select(0, &fdRead, NULL, NULL, NULL);
43. if(nRet > 0) {
44. for(int i=0; i 0) {
64. szText[nRecv] = '\0';
65. printf(" :%s
", szText);
66.
67. //
68.
69. char str[10];
70. char str1[20]="1 100 :";
71. itoa(itotal,str,10);
72. char * sendData = strcat(str1,str);
73. ::send(fdSocket.fd_array[i], sendData, strlen(sendData), 0);
74.
75.
76. }
77. else {
78. ::closesocket(fdSocket.fd_array[i]);
79. FD_CLR(fdSocket.fd_array[i], &fdSocket);
80. }
81. }
82. }
83. }
84.
85.
86. }
87. else {
88. printf(" !
");
89. break;
90. }
91. }
92. return 0;
93. }
94.
95.
Client:
1. #include "winsock2.h"
2. #include
3. #pragma comment(lib, "ws2_32.lib")
4. using namespace std;
5. BOOL RecvLine(SOCKET s, char* buf); //
6. int main(int argc, char* argv[])
7. {
8. const int BUF_SIZE = 64;
9. WSADATA wsd; //WSADATA
10. SOCKET sHost; //
11. SOCKADDR_IN servAddr; //
12. char buf[BUF_SIZE]; //
13. char bufRecv[BUF_SIZE];
14. int retVal; //
15. //WSAStartup()
16. if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
17. {
18. cout << "WSAStartup failed!" << endl;
19. return -1;
20. }
21. //socket()
22. sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
23. if(INVALID_SOCKET == sHost)
24. {
25. cout << "socket failed!" << endl;
26. WSACleanup();//
27. return -1;
28. }
29. //
30. servAddr.sin_family =AF_INET;
31. servAddr.sin_addr.s_addr = inet_addr("172.21.0.140"); servAddr.sin_port = htons((short)5555);
32. int nServAddlen = sizeof(servAddr);
33. //connet()
34. retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));
35. if(SOCKET_ERROR == retVal)
36. {
37. cout << "connect failed!" << endl;
38. closesocket(sHost); //
39. WSACleanup(); //
40. return -1;
41. }
42. int FLAG = 1;
43. //while(true)
44. while(FLAG)
45. {
46. //send()
47. ZeroMemory(buf, BUF_SIZE);
48. char sendM[] = " 1 100 ";
49. retVal = send(sHost, sendM, strlen(sendM), 0);
50. if (SOCKET_ERROR == retVal)
51. {
52. cout << "send failed!" << endl;
53. closesocket(sHost); //
54. WSACleanup(); //
55. return -1;
56. }
57. //Recv()
58. ZeroMemory(bufRecv, BUF_SIZE);
59. recv(sHost, bufRecv,BUF_SIZE , 0); // , 5 cout << endl <
転載先:https://www.cnblogs.com/boxker/p/10745487.html