您的当前位置:首页正文

Windows下C语言的Socket编程例子(TCP和UDP)+++

2022-02-18 来源:个人技术集锦


Windows下C语言的Socket编程例子(TCP和UDP) 一。

server端:

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端:

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

二.

SERVER 端

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 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 serAddr.sin_family = AF_INET;

25 serAddr.sin_port = htons(8888);

26 serAddr.sin_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 \\r\\n\", inet_ntoa(remoteAddr.sin_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 端

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 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 sin.sin_family = AF_INET;

19 sin.sin_port = htons(8888);

20 sin.sin_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 }

因篇幅问题不能全部显示,请点此查看更多更全内容