基于C++的socket通信实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket 程序例子,开发环境是vc6:
首先是TCP
server端:
[cpp]view plaincopy
1.#include "stdafx.h"
2.#include
3.#include
4.
5.#pragma comment(lib,"ws2_32.lib")
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. sin.sin_family = AF_INET;
28. sin.sin_port = htons(8888);
29. sin.sin_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 \r\n", inet_ntoa(remoteAddr.sin_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_32.lib")
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. serAddr.sin_family = AF_INET;
26. serAddr.sin_port = htons(8888);
27. serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
28.if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ER
ROR)
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);