windows socket 简单实例
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 简单实例相关推荐
- Windows API简单实例
第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName ...
- Windows服务简单实例
1.定时器使用 partial class TimerService : ServiceBase{public TimerService(){InitializeComponent();}Timer ...
- Linux C Socket编程原理及简单实例
部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1. 什么是TCP/IP.UDP? 2. Socket在哪里 ...
- Windows Socket编程笔记之最简单的小Demo
Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API------- 0.初始化 | WSAStartup() 1.创建So ...
- protobuf和socket通信简单实例
protobuf和socket通信简单实例 protobuf是 Google 公司内部的混合语言数据标准,可以用来定义通信的协议,由于其有序列化和反序列化的操作,减小了存储或通信的数据量,从而达到 ...
- Windows socket之最简单的socket程序
Windows socket之最简单的socket程序 原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSA ...
- C++基础--简单Socket通信实例
// WindowsSocketServer.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream&g ...
- 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现
设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...
- linux查cpu命令4可以选择哪些运动,Linux 查看cpu 信息的命令及简单实例
Linux 查看cpu 信息的命令及简单实例 有的时候领导会问你某个服务器是多少核的,多少线程的,是不是会懵了,下面教你怎么看cpuinfo 1.查看cpu个数: # cat /proc/cpuinf ...
最新文章
- 【编程题目】编程判断俩个链表是否相交 ☆
- SAP CRM IBASE保存的逻辑分析
- 阿里云首次公布年度3大战略方向,中台做厚,做强生态,还要再招5000人
- 【例题+习题】【数值计算方法复习】【湘潭大学】(四)
- cc如何转换html5,HTML5转换
- goaheadlinux移植_goahead
- python打开指定路径的excel_python使用相对定位,绝对定位,选取同级别文件下的指定文件(csv,excel)...
- mac php apache mysql 集成环境 的软件
- 深入浅出事件流处理NEsper(三)
- C++ float、double判断是否等于0
- 面向对象六大原则----imageLoader为例层层优化
- 2019美赛备战日记1/18
- 机器学习| 面试题:11、LDA算法原理
- 最新Java技术栈面试详细完整
- 华三交换机配置vrrp_h3c vrrp配置实例
- 一句话木马上传常见的几种方法
- Android进程管理详解
- 解决WINDOWS邮箱无法收取QQ邮件
- 一个强大的小程序-Phun
- VBA 字典数组运用查询系统
热门文章
- python bool值要注意的一些地方
- [NBUT 1458 Teemo]区间第k大问题,划分树
- 以嵌入式系统设计师考试成绩,开始嵌入式博客之旅
- 语法分析器c语言 递归子程序,RecursiveSubroutine
- python 3的33个保留字列表_python 33个保留字是什么意思
- pytorch 使用cpu_想读读PyTorch底层代码?这份内核机制简介送给你
- Error occurred while trying to proxy request
- rocketmq中各个角色介绍
- Vscode如何新建html文件
- java mathematica_用Java获取Mathematica图像