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. }


本文标签: 连接 想写 学习