Windows Socket编程
来源:互联网 发布:人民网微博微信矩阵 编辑:程序博客网 时间:2024/05/16 09:17
Windows下Socket编程主要包括以下几部分:
服务端
1、初始化Windows Socket库。
2、创建Socket。
3、绑定Socket。
4、监听。
5、Accept。
6、接收、发送数据。
客户端
1、初始化Windows Socket库。
2、创建Socket。
3、连接Socket。
4、接收、发送数据。
服务端每接收到一个客户端的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 <Windows.h> 4 5 using namespace std; 6 7 #define PORT 4000 8 #define IP_ADDRESS "192.168.1.145" 9 10 DWORD WINAPI ClientThread(LPVOID lpParameter) 11 { 12 SOCKET CientSocket = (SOCKET)lpParameter; 13 int Ret = 0; 14 char RecvBuffer[MAX_PATH]; 15 16 while ( true ) 17 { 18 memset(RecvBuffer, 0x00, sizeof(RecvBuffer)); 19 Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0); 20 if ( Ret == 0 || Ret == SOCKET_ERROR ) 21 { 22 cout<<"客户端退出!"<<endl; 23 break; 24 } 25 cout<<"接收到客户信息为:"<<RecvBuffer<<endl; 26 } 27 28 return 0; 29 } 30 31 int main(int argc, char* argv[]) 32 { 33 WSADATA Ws; 34 SOCKET ServerSocket, CientSocket; 35 struct sockaddr_in LocalAddr, ClientAddr; 36 int Ret = 0; 37 int AddrLen = 0; 38 HANDLE hThread = NULL; 39 40 //Init Windows Socket 41 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) 42 { 43 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; 44 return -1; 45 } 46 47 //Create Socket 48 ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 49 if ( ServerSocket == INVALID_SOCKET ) 50 { 51 cout<<"Create Socket Failed::"<<GetLastError()<<endl; 52 return -1; 53 } 54 55 LocalAddr.sin_family = AF_INET; 56 LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); 57 LocalAddr.sin_port = htons(PORT); 58 memset(LocalAddr.sin_zero, 0x00, 8); 59 60 //Bind Socket 61 Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr)); 62 if ( Ret != 0 ) 63 { 64 cout<<"Bind Socket Failed::"<<GetLastError()<<endl; 65 return -1; 66 } 67 68 Ret = listen(ServerSocket, 10); 69 if ( Ret != 0 ) 70 { 71 cout<<"listen Socket Failed::"<<GetLastError()<<endl; 72 return -1; 73 } 74 75 cout<<"服务端已经启动"<<endl; 76 77 while ( true ) 78 { 79 AddrLen = sizeof(ClientAddr); 80 CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen); 81 if ( CientSocket == INVALID_SOCKET ) 82 { 83 cout<<"Accept Failed::"<<GetLastError()<<endl; 84 break; 85 } 86 87 cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl; 88 89 hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL); 90 if ( hThread == NULL ) 91 { 92 cout<<"Create Thread Failed!"<<endl; 93 break; 94 } 95 96 CloseHandle(hThread); 97 } 98 99 closesocket(ServerSocket);100 closesocket(CientSocket);101 WSACleanup();102 103 return 0;104 }
1 //Client.cpp 2 #include <iostream> 3 #include <Windows.h> 4 5 using namespace std; 6 7 #define PORT 4000 8 #define IP_ADDRESS "192.168.1.145" 9 10 11 int main(int argc, char* argv[])12 {13 WSADATA Ws;14 SOCKET CientSocket;15 struct sockaddr_in ServerAddr;16 int Ret = 0;17 int AddrLen = 0;18 HANDLE hThread = NULL;19 char SendBuffer[MAX_PATH];20 21 //Init Windows Socket22 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )23 {24 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;25 return -1;26 }27 28 //Create Socket29 CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);30 if ( CientSocket == 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(CientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));42 if ( Ret == SOCKET_ERROR )43 {44 cout<<"Connect Error::"<<GetLastError()<<endl;45 return -1;46 }47 else48 {49 cout<<"连接成功!"<<endl;50 }51 52 while ( true )53 {54 cin.getline(SendBuffer, sizeof(SendBuffer));55 Ret = send(CientSocket, 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(CientSocket);64 WSACleanup();65 66 return 0;67 }
0 0
- windows socket编程流程
- Windows Socket编程
- Windows Socket编程简介
- Windows Socket 网络编程
- Windows Socket 编程
- windows socket 网络编程
- windows socket编程原理
- windows socket网络编程
- Windows socket 编程 基础
- windows socket编程 理论基础
- windows socket 编程
- windows socket 网络编程
- Windows Socket编程简介
- Windows Socket编程
- Windows SOCKET编程
- windows socket编程
- Windows SOCKET编程
- Windows socket 编程汇总
- JVM的参数说明
- Python如何获取当前的日期和时间
- getWindow().setFlags()
- ASP.NET 1.x的开发人员
- http://user.qzone.qq.com/1467400757/blog/1388395412
- Windows Socket编程
- DOM解析xml
- Sender和Receiver两个程序组成
- 线程间无锁通讯算法
- 程序员修炼之道
- iOS学习笔记--Core Data的使用
- 在 Yarn 上 安装 Spark 0.9.0
- 驱动程序中的硬件操作(2)
- BEC考试