admin 管理员组文章数量: 887386
2023年12月22日发(作者:docker部署php)
刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6:
首先是TCP
server端:
[cpp] view plaincopy
1. #include "stdafx.h"
2. #include
3. #include
4.
5. #pragma comment(lib,"ws2_")
6.
7. int main(int argc, char* argv[])
8. {
9. //初始化WSA
10. WORD sockVersion = MAKEWORD(2,2);
11. WSADATA wsaData;
12. if(WSAStartup(sockVersion, &wsaData)!=0)
13. {
14. return 0;
15. }
16.
17. //创建套接字
18. SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
19. if(slisten == INVALID_SOCKET)
20. {
21. printf("socket error !");
22. return 0;
23. }
24.
25. //绑定IP和端口
26. sockaddr_in sin;
27. _family = AF_INET;
28. _port = htons(8888);
29. _addr.S_un.S_addr = INADDR_ANY;
30. if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
31. {
32. printf("bind error !");
33. }
34.
35. //开始监听
36. if(listen(slisten, 5) == SOCKET_ERROR)
37. {
38. printf("listen error !");
39. return 0;
40. }
41.
42. //循环接收数据
43. SOCKET sClient;
44. sockaddr_in remoteAddr;
45. int nAddrlen = sizeof(remoteAddr);
46. char revData[255];
47. while (true)
48. {
49. printf("等待连接...n");
50. sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
51. if(sClient == INVALID_SOCKET)
52. {
53. printf("accept error !");
54. continue;
55. }
56. printf("接受到一个连接:%s rn", inet_ntoa(_addr));
57.
58. //接收数据
59. int ret = recv(sClient, revData, 255, 0);
60. if(ret > 0)
61. {
62. revData[ret] = 0x00;
63. printf(revData);
64. }
65.
66. //发送数据
67. char * sendData = "你好,TCP客户端!n";
68. send(sClient, sendData, strlen(sendData), 0);
69. closesocket(sClient);
70. }
71.
72. closesocket(slisten);
73. WSACleanup();
74. return 0;
75. }
client端:
[cpp] view plaincopy
1. #include "stdafx.h"
2. #include
3. #include
4.
5. #pragma comment(lib,"ws2_")
6.
7.
8. int main(int argc, char* argv[])
9. {
10. WORD sockVersion = MAKEWORD(2,2);
11. WSADATA data;
12. if(WSAStartup(sockVersion, &data) != 0)
13. {
14. return 0;
15. }
16.
17. SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
18. if(sclient == INVALID_SOCKET)
19. {
20. printf("invalid socket !");
21. return 0;
22. }
23.
24. sockaddr_in serAddr;
25. _family = AF_INET;
26. _port = htons(8888);
27. _addr.S_un.S_addr = inet_addr("127.0.0.1");
28. if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
29. {
30. printf("connect error !");
31. closesocket(sclient);
32. return 0;
33. }
34. char * sendData = "你好,TCP服务端,我是客户端!n";
35. send(sclient, sendData, strlen(sendData), 0);
36.
37. char recData[255];
38. int ret = recv(sclient, recData, 255, 0);
39. if(ret > 0)
40. {
41. recData[ret] = 0x00;
42. printf(recData);
43. }
44. closesocket(sclient);
45. WSACleanup();
46. return 0;
47. }
然后是UDP
server端:
[cpp] view plaincopy
1. #include "stdafx.h"
2. #include
3. #include
4.
5. #pragma comment(lib, "ws2_")
6.
7. int main(int argc, char* argv[])
8. {
9. WSADATA wsaData;
10. WORD sockVersion = MAKEWORD(2,2);
11. if(WSAStartup(sockVersion, &wsaData) != 0)
12. {
13. return 0;
14. }
15.
16. SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
17. if(serSocket == INVALID_SOCKET)
18. {
19. printf("socket error !");
20. return 0;
21. }
22.
23. sockaddr_in serAddr;
24. _family = AF_INET;
25. _port = htons(8888);
26. _addr.S_un.S_addr = INADDR_ANY;
27. if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
28. {
29. printf("bind error !");
30. closesocket(serSocket);
31. return 0;
32. }
33.
34. sockaddr_in remoteAddr;
35. int nAddrLen = sizeof(remoteAddr);
36. while (true)
37. {
38. char recvData[255];
39. int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);
40. if (ret > 0)
41. {
42. recvData[ret] = 0x00;
43. printf("接受到一个连接:%s rn", inet_ntoa(_addr));
44. printf(recvData);
45. }
46.
47. char * sendData = "一个来自服务端的UDP数据包n";
48. sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen);
49.
50. }
51. closesocket(serSocket);
52. WSACleanup();
53. return 0;
54. }
client端:
[cpp] view plaincopy
1. #include "stdafx.h"
2. #include
3. #include
4.
5. #pragma comment(lib, "ws2_")
6.
7. int main(int argc, char* argv[])
8. {
9. WORD socketVersion = MAKEWORD(2,2);
10. WSADATA wsaData;
11. if(WSAStartup(socketVersion, &wsaData) != 0)
12. {
13. return 0;
14. }
15. SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
16.
17. sockaddr_in sin;
18. _family = AF_INET;
19. _port = htons(8888);
20. _addr.S_un.S_addr = inet_addr("127.0.0.1");
21. int len = sizeof(sin);
22.
23. char * sendData = "来自客户端的数据包.n";
24. sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len);
25.
26. char recvData[255];
27. int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);
28. if(ret > 0)
29. {
30. recvData[ret] = 0x00;
31. printf(recvData);
32. }
33.
34. closesocket(sclient);
35. WSACleanup();
36. return 0;
37. }
版权声明:本文标题:基于C++的socket通信实例 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1703198304h441929.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论