Windows下Socket编程主要包括以下几部分:
服务端
   1、初始化Windows Socket库。
   2、创建Socket。
   3、绑定Socket。
   4、监听。
   5、Accept。
   6、接收、发送数据。

客户端
   1、初始化Windows Socket库。
   2、创建Socket。
   3、连接Socket。
   4、接收、发送数据。

服务端每接收到一个客户端的Socket,则创建一个线程。满足一个服务端连接多个客户端。

  1 //Server.cpp
  2 #include <iostream>
  3 #include <winsock2.h>
  4
  5 using namespace std;
  6
  7 #pragma comment(lib, "ws2_32.lib")
  8
  9 #define PORT 4000
 10 #define IP_ADDRESS "10.241.39.19"
 11
 12
 13 DWORD WINAPI ClientThread(LPVOID lpParameter)
 14 {
 15     SOCKET CientSocket = (SOCKET)lpParameter;
 16     int Ret = 0;
 17     char RecvBuffer[MAX_PATH];
 18
 19     while ( true )
 20     {
 21         memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
 22         Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
 23         if ( Ret == 0 || Ret == SOCKET_ERROR )
 24         {
 25             cout<<"客户端退出!"<<endl;
 26             break;
 27         }
 28         cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
 29     }
 30
 31     return 0;
 32 }
 33
 34 int main(int argc, char* argv[])
 35 {
 36     WSADATA  Ws;
 37     SOCKET ServerSocket, ClientSocket;
 38     struct sockaddr_in LocalAddr, ClientAddr;
 39     int Ret = 0;
 40     int AddrLen = 0;
 41     HANDLE hThread = NULL;
 42
 43     //Init Windows Socket
 44     if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
 45     {
 46         cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
 47         return -1;
 48     }
 49
 50     //Create Socket
 51     ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 52     if ( ServerSocket == INVALID_SOCKET )
 53     {
 54         cout<<"Create Socket Failed::"<<GetLastError()<<endl;
 55         return -1;
 56     }
 57
 58     LocalAddr.sin_family = AF_INET;
 59     LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
 60     LocalAddr.sin_port = htons(PORT);
 61     memset(LocalAddr.sin_zero, 0x00, 8);
 62
 63     //Bind Socket
 64     Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
 65     if ( Ret != 0 )
 66     {
 67         cout<<"Bind Socket Failed::"<<GetLastError()<<endl;
 68         return -1;
 69     }
 70     //listen
 71     Ret = listen(ServerSocket, 10);
 72     if ( Ret != 0 )
 73     {
 74         cout<<"listen Socket Failed::"<<GetLastError()<<endl;
 75         return -1;
 76     }
 77
 78     cout<<"服务端已经启动"<<endl;
 79
 80     while ( true )
 81     {
 82         AddrLen = sizeof(ClientAddr);
 83         ClientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
 84         if ( ClientSocket == INVALID_SOCKET )
 85         {
 86             cout<<"Accept Failed::"<<GetLastError()<<endl;
 87             break;
 88         }
 89
 90         cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl;
 91
 92         hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL);
 93         if ( hThread == NULL )
 94         {
 95             cout<<"Create Thread Failed!"<<endl;
 96             break;
 97         }
 98
 99         CloseHandle(hThread);
100     }
101
102     closesocket(ServerSocket);
103     closesocket(ClientSocket);
104     WSACleanup();
105
106     return 0;
107 }

 1 // Client.cpp
 2 #include <iostream>
 3 #include <winsock2.h>
 4
 5 using namespace std;
 6
 7 #pragma comment(lib, "ws2_32.lib")
 8
 9 #define PORT 4000
10 #define IP_ADDRESS "10.241.39.19"
11
12 int main(int argc, char * argv[])
13 {
14     WSADATA Ws;
15     SOCKET ClientSocket;
16     struct sockaddr_in ServerAddr;
17     int Ret = 0;
18     int AddrLen = 0;
19     HANDLE hThread = NULL;
20     char SendBuffer[MAX_PATH];
21
22     //Init Windows Socket
23     if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
24     {
25         cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
26         return -1;
27     }
28     //Create Socket
29     ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
30     if ( ClientSocket == INVALID_SOCKET )
31     {
32         cout<<"Create Socket Failed::"<<GetLastError()<<endl;
33         return -1;
34     }
35
36     ServerAddr.sin_family = AF_INET;
37     ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
38     ServerAddr.sin_port = htons(PORT);
39     memset(ServerAddr.sin_zero, 0x00, 8);
40
41     Ret = connect(ClientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));
42     if ( Ret == SOCKET_ERROR )
43     {
44         cout<<"Connect Error::"<<GetLastError()<<endl;
45         return -1;
46     }
47     else
48     {
49         cout<<"连接成功!"<<endl;
50     }
51
52     while ( true )
53     {
54         cin.getline(SendBuffer, sizeof(SendBuffer));
55         Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
56         if ( Ret == SOCKET_ERROR )
57         {
58             cout<<"Send Info Error::"<<GetLastError()<<endl;
59             break;
60         }
61     }
62
63     closesocket(ClientSocket);
64     WSACleanup();
65
66     return 0;
67 }

转载于:https://www.cnblogs.com/xubin0523/archive/2012/09/11/2679851.html

windows socket 简单实例相关推荐

  1. Windows API简单实例

    第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName ...

  2. Windows服务简单实例

    1.定时器使用 partial class TimerService : ServiceBase{public TimerService(){InitializeComponent();}Timer ...

  3. Linux C Socket编程原理及简单实例

    部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1.   什么是TCP/IP.UDP? 2.   Socket在哪里 ...

  4. Windows Socket编程笔记之最简单的小Demo

    Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API-------  0.初始化         |  WSAStartup()  1.创建So ...

  5. protobuf和socket通信简单实例

    protobuf和socket通信简单实例   protobuf是 Google 公司内部的混合语言数据标准,可以用来定义通信的协议,由于其有序列化和反序列化的操作,减小了存储或通信的数据量,从而达到 ...

  6. Windows socket之最简单的socket程序

    Windows socket之最简单的socket程序 原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSA ...

  7. C++基础--简单Socket通信实例

    // WindowsSocketServer.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream&g ...

  8. 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现

    设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...

  9. linux查cpu命令4可以选择哪些运动,Linux 查看cpu 信息的命令及简单实例

    Linux 查看cpu 信息的命令及简单实例 有的时候领导会问你某个服务器是多少核的,多少线程的,是不是会懵了,下面教你怎么看cpuinfo 1.查看cpu个数: # cat /proc/cpuinf ...

最新文章

  1. 【编程题目】编程判断俩个链表是否相交 ☆
  2. SAP CRM IBASE保存的逻辑分析
  3. 阿里云首次公布年度3大战略方向,中台做厚,做强生态,还要再招5000人
  4. 【例题+习题】【数值计算方法复习】【湘潭大学】(四)
  5. cc如何转换html5,HTML5转换
  6. goaheadlinux移植_goahead
  7. python打开指定路径的excel_python使用相对定位,绝对定位,选取同级别文件下的指定文件(csv,excel)...
  8. mac php apache mysql 集成环境 的软件
  9. 深入浅出事件流处理NEsper(三)
  10. C++ float、double判断是否等于0
  11. 面向对象六大原则----imageLoader为例层层优化
  12. 2019美赛备战日记1/18
  13. 机器学习| 面试题:11、LDA算法原理
  14. 最新Java技术栈面试详细完整
  15. 华三交换机配置vrrp_h3c vrrp配置实例
  16. 一句话木马上传常见的几种方法
  17. Android进程管理详解
  18. 解决WINDOWS邮箱无法收取QQ邮件
  19. 一个强大的小程序-Phun
  20. VBA 字典数组运用查询系统

热门文章

  1. python bool值要注意的一些地方
  2. [NBUT 1458 Teemo]区间第k大问题,划分树
  3. 以嵌入式系统设计师考试成绩,开始嵌入式博客之旅
  4. 语法分析器c语言 递归子程序,RecursiveSubroutine
  5. python 3的33个保留字列表_python 33个保留字是什么意思
  6. pytorch 使用cpu_想读读PyTorch底层代码?这份内核机制简介送给你
  7. Error occurred while trying to proxy request
  8. rocketmq中各个角色介绍
  9. Vscode如何新建html文件
  10. java mathematica_用Java获取Mathematica图像