Windows Socket编程
来源:互联网 发布:loop细分曲面算法 编辑:程序博客网 时间:2024/05/21 17:21
原文地址:Windows Socket编程
Windows下Socket编程主要包括以下几部分:
服务端
1、初始化Windows Socket库。
2、创建Socket。
3、绑定Socket。
4、监听。
5、Accept。
6、接收、发送数据。
客户端
1、初始化Windows Socket库。
2、创建Socket。
3、连接Socket。
4、接收、发送数据。
服务端每接收到一个客户端的Socket,则创建一个线程。满足一个服务端连接多个客户端
//Server.cpp#include <iostream>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")#include <Windows.h>using namespace std;#define PORT 4000#define IP_ADDRESS "192.168.1.145"DWORD WINAPI ClientThread(LPVOID lpParameter){ SOCKET CientSocket = (SOCKET)lpParameter; int Ret = 0; char RecvBuffer[MAX_PATH]; while ( true ) { memset(RecvBuffer, 0x00, sizeof(RecvBuffer)); Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0); if ( Ret == 0 || Ret == SOCKET_ERROR ) { cout<<"客户端退出!"<<endl; break; } cout<<"接收到客户信息为:"<<RecvBuffer<<endl; } return 0;}int main(int argc, char* argv[]){ WSADATA Ws; SOCKET ServerSocket, CientSocket; struct sockaddr_in LocalAddr, ClientAddr; int Ret = 0; int AddrLen = 0; HANDLE hThread = NULL; //Init Windows Socket if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) { cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; return -1; } //Create Socket ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if ( ServerSocket == INVALID_SOCKET ) { cout<<"Create Socket Failed::"<<GetLastError()<<endl; return -1; } LocalAddr.sin_family = AF_INET; LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); LocalAddr.sin_port = htons(PORT); memset(LocalAddr.sin_zero, 0x00, 8); //Bind Socket Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr)); if ( Ret != 0 ) { cout<<"Bind Socket Failed::"<<GetLastError()<<endl; return -1; } Ret = listen(ServerSocket, 10); if ( Ret != 0 ) { cout<<"listen Socket Failed::"<<GetLastError()<<endl; return -1; } cout<<"服务端已经启动"<<endl; while ( true ) { AddrLen = sizeof(ClientAddr); CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen); if ( CientSocket == INVALID_SOCKET ) { cout<<"Accept Failed::"<<GetLastError()<<endl; break; } cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl; hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL); if ( hThread == NULL ) { cout<<"Create Thread Failed!"<<endl; break; } CloseHandle(hThread); } closesocket(ServerSocket); closesocket(CientSocket); WSACleanup(); return 0;}
//Client.cpp#include <iostream>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")#include <Windows.h>using namespace std;#define PORT 4000#define IP_ADDRESS "192.168.1.145"int main(int argc, char* argv[]){ WSADATA Ws; SOCKET CientSocket; struct sockaddr_in ServerAddr; int Ret = 0; int AddrLen = 0; HANDLE hThread = NULL; char SendBuffer[MAX_PATH]; //Init Windows Socket if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) { cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; return -1; } //Create Socket CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if ( CientSocket == INVALID_SOCKET ) { cout<<"Create Socket Failed::"<<GetLastError()<<endl; return -1; } ServerAddr.sin_family = AF_INET; ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); ServerAddr.sin_port = htons(PORT); memset(ServerAddr.sin_zero, 0x00, 8); Ret = connect(CientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr)); if ( Ret == SOCKET_ERROR ) { cout<<"Connect Error::"<<GetLastError()<<endl; return -1; } else { cout<<"连接成功!"<<endl; } while ( true ) { cin.getline(SendBuffer, sizeof(SendBuffer)); Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0); if ( Ret == SOCKET_ERROR ) { cout<<"Send Info Error::"<<GetLastError()<<endl; break; } } closesocket(CientSocket); WSACleanup(); return 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 编程汇总
- 整理的C、C++面试题
- Android 歌词同步滚动效果
- 软件公司的两种管理方式
- 归并排序
- 详解mysql的sql_mode模式
- Windows Socket编程
- Linux / Unix Script: Simple Process Checker To Find Out If A Service Is Running or Not
- Asp数据库中rs.Open sql,conn,的含义
- 最常被程序员们谎称读过的计算机书籍http://hi.baidu.com/xoxoxo?page=2
- 易语言网页操作模块
- Listener
- web.xml 详细介绍
- 程序员编程艺术:三之三续、求数组中给定下标区间内的第K小(大)元素
- UVA 10054 The Necklace