luasocket系列之winsocket基础补充_TcpServerDemo
来源:互联网 发布:苹果绿色上网软件注册 编辑:程序博客网 时间:2024/06/05 21:12
initsock.h 代码:
//winsocket2头文件,用于使用winsock2网络库#include <winsock2.h>#pragma comment(lib, "WS2_32")// 链接到WS2_32.libclass CInitSock{public:CInitSock(BYTE minorVer = 2, BYTE majorVer = 2){// 初始化WS2_32.dllWSADATA wsaData;//用于描述winsock2的结构体WORD sockVersion = MAKEWORD(minorVer, majorVer);if(::WSAStartup(sockVersion, &wsaData) != 0){exit(0);}}~CInitSock(){::WSACleanup();}};
TCPServer_Sample.cpp 代码:
//////////////////////////////////////////////////// TCPServer.cpp文件#include "InitSock.h"#include <stdio.h>using namespace std;#include "iostream"int main(){CInitSock initSock;// 初始化Winsock库// 创建套节字//AF_INET-The Internet Protocol version 4 (IPv4) address family.//SOCK_STREAM-A socket type that provides sequenced, reliable, two-way, connection-based byte streams with an OOB data transmission mechanism. //This socket type uses the Transmission Control Protocol (TCP) for the Internet address family (AF_INET or AF_INET6).//IPPROTO_TCP-The Transmission Control Protocol (TCP). This is a possible value when the af parameter is AF_INET or AF_INET6 and the type parameter is SOCK_STREAM.SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(sListen == INVALID_SOCKET){printf("Failed socket() \n");return 0;}else{ //If no error occurs, socket returns a descriptor referencing the new socket. Otherwise, a value of INVALID_SOCKET is returned/* * The new type to be used in all * instances which refer to sockets. *///typedef UINT_PTR SOCKET;// typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; socket套接字实际上为 unsigned int 类型,由网络库生成,标示每一个socketcout<<"sListen:"<<sListen<<endl;}// 填充sockaddr_in结构sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(4567);sin.sin_addr.S_un.S_addr = INADDR_ANY;// 绑定这个套节字到一个本地地址if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){printf("Failed bind() \n");return 0;}// 进入监听模式if(::listen(sListen, 2) == SOCKET_ERROR){printf("Failed listen() \n");return 0;}// 循环接受客户的连接请求sockaddr_in remoteAddr; int nAddrLen = sizeof(remoteAddr);SOCKET sClient;char szText[] = " TCP Server Demo! \r\n";while(TRUE){// 接受一个新连接sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);if(sClient == INVALID_SOCKET){printf("Failed accept()");continue;}else{ cout<<"sClient:"<<sClient<<endl;}printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));// 向客户端发送数据size_t t =::send(sClient, szText, strlen(szText), 0);if(t !=SOCKET_ERROR){ //If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode. cout<<"发送字节数量:"<<t<<endl;}// 关闭同客户端的连接::closesocket(sClient);}// 关闭监听套节字::closesocket(sListen);return 0;}
0 0
- luasocket系列之winsocket基础补充_TcpServerDemo
- luasocket系列之winsocket基础补充—winsock库1
- luasocket系列: luasocket tcp
- luasocket系列: luasocket hello world!
- Lua基础 安装LuaSocket
- luasocket 之 udp
- 【WinSocket】WinSocket 之TCP示例
- 【WinSocket】WinSocket 之TCP示例
- luasocket
- luasocket
- LuaSocket
- luasocket
- 数据库补充学习之基础补充
- java基础之细节补充
- winsocket<一> 套接字基础
- 前端面试系列之----补充问题集合
- 深度学习系列之知识补充
- winsocket
- 有道词典
- 简单的图片抓取demo
- Apache之安装
- 通过禁用javascript给Eclipse加速
- 中介者模式(Mediator)
- luasocket系列之winsocket基础补充_TcpServerDemo
- IOS 开发环境,证书和授权文件
- C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)
- 有道词典
- WARNING: CAN’T OPEN CONFIG FILE: /USR/LOCAL/SSL/OPENSSL.CNF
- Debug 调试详解
- javassis在spring初始化前修改class文件。
- 解释器模式(Interpreter)
- EGOCache缓存框架详细讲解