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
原创粉丝点击