一个简单的Windows下的socket程序

Posted C语言Plus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单的Windows下的socket程序相关的知识,希望对你有一定的参考价值。


上节演示了 Linux 下的 socket 程序,可能大部分同学都没有Linux环境,那么,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。

服务器端代码 server.cpp:

 
   
   
 
  1. #include <stdio.h>

  2. #include <winsock2.h>

  3. #pragma comment (lib, "ws2_32.lib")  //加载 ws2_32.dll


  4. int main(){

  5. //初始化 DLL

  6. WSADATA wsaData;

  7. WSAStartup( MAKEWORD(2, 2), &wsaData);


  8. //创建套接字

  9. SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);


  10. //绑定套接字

  11. sockaddr_in sockAddr;

  12. memset(&sockAddr, 0, sizeof(sockAddr));  //每个字节都用0填充

  13. sockAddr.sin_port = htons(1234);  //端口

  14. bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));


  15. //进入监听状态

  16. listen(servSock, 20);


  17. //接收客户端请求

  18. SOCKADDR clntAddr;

  19. int nSize = sizeof(SOCKADDR);

  20. SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);


  21. //向客户端发送数据

  22. char *str = "Hello World!";

  23. send(clntSock, str, strlen(str)+sizeof(char), NULL);


  24. //关闭套接字

  25. closesocket(clntSock);

  26. closesocket(servSock);


  27. //终止 DLL 的使用

  28. WSACleanup();


  29. return 0;

  30. }


客户端代码 client.cpp:

 
   
   
 
  1. #include <stdio.h>

  2. #include <stdlib.h>

  3. #include <WinSock2.h>

  4. #pragma comment(lib, "ws2_32.lib")  //加载 ws2_32.dll


  5. int main(){

  6. //初始化DLL

  7. WSADATA wsaData;

  8. WSAStartup(MAKEWORD(2, 2), &wsaData);


  9. //创建套接字

  10. SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);


  11. //向服务器发起请求

  12. sockaddr_in sockAddr;

  13. memset(&sockAddr, 0, sizeof(sockAddr));  //每个字节都用0填充

  14. sockAddr.sin_family = PF_INET;

  15. sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

  16. sockAddr.sin_port = htons(1234);

  17. connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));


  18. //接收服务器传回的数据

  19. char szBuffer[MAXBYTE] = {0};

  20. recv(sock, szBuffer, MAXBYTE, NULL);


  21. //输出接收到的数据

  22. printf("Message form server: %s\n", szBuffer);


  23. //关闭套接字

  24. closesocket(sock);


  25. //终止使用 DLL

  26. WSACleanup();


  27. system("pause");

  28. return 0;

  29. }


将 server.cpp 和 client.cpp 分别编译为 server.exe 和 client.exe,先运行 server.exe,再运行 client.exe,输出结果为:
Message form server: Hello World!

Windows 下的 socket 程序和 Linux 思路相同,但细节有所差别:
1) Windows 下的 socket 程序依赖 Winsock.dll 或 ws2_32.dll,必须提前加载。DLL 有两种加载方式,请查看:动态链接库DLL的加载。


以上是关于一个简单的Windows下的socket程序的主要内容,如果未能解决你的问题,请参考以下文章

windows下的socket网络编程(入门级)

Socket网络编程

一个简单的Linux下的socket程序

由一个简单需求到Linux环境下的syslogunix domain socket

linux下的程序如何在windows下运行

linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码