一个简单的c++ socket服务程序

来源:互联网 发布:英语语音识别软件 编辑:程序博客网 时间:2024/06/01 10:34
// CppSocket.cpp : 定义控制台应用程序的入口点。
//

在  stdafx.h 中添加

#pragma comment(lib, "ws2_32.lib")


#include "stdafx.h"
#include "stdio.h"
#include "WinSock2.h"
#include "WinDef.h"
 

 
int _tmain(int argc, _TCHAR* argv[])
{


// 初始化WS2_32.dll
WSADATA wsaData;
   BYTE minorVer = 2;
   BYTE majorVer = 2;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
 
if(WSAStartup(sockVersion, &wsaData) != 0)
{
exit(0);
}
  // 创建套节字
SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("Failed socket() \n");
return 0;
}

// 填充sockaddr_in结构
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4567);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 


// 绑定这个套节字到一个本地地址
if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("Failed bind() \n");
return 0;
}

// 进入监听模式
if(listen(sListen, 0) == 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;
}

printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));

// 向客户端发送数据
send(sClient, szText, strlen(szText), 0);
// 接收数据
char buff[512]; 
int nRecv = recv(sClient,buff, 512, 0);

if(nRecv > 0)
{
buff[nRecv] = '\0';
printf(" 接收到数据:%s", buff);
}
// 关闭同客户端的连接
closesocket(sClient);
}

// 关闭监听套节字
closesocket(sListen);


return 0;
 
}