2024年3月22日发(作者:)
0、可运行实例及基本知识
1、如何设置socket函数的非阻塞调用?
2、深入 CSocket 编程之阻塞和非阻塞模式
3、SOCKET类的设计和实现
服务器
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#pragma comment(lib, "ws2_")
#define SERVPORT 7861 /*服务器监听端口号*/
#define MAXDATASIZE 100
#define BACKLOG 10
using namespace std;
std::vector
char buf[MAXDATASIZE];
DWORD WINAPI qtPingServerThreadFunc(LPVOID lpThreadParameter);
int _tmain(int argc, _TCHAR* argv[])
{
}
if (LOBYTE(on)!= 2 || HIBYTE(on) != 0)
SOCKET sockfd; /*sock_fd:监听socket;client_fd:数据传输socket */
struct sockaddr_in my_addr; /* 本机地址信息*/
struct sockaddr_in remote_addr; /* 客户端地址信息*/
char szMsg[]="hello";
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2,0);
err = WSAStartup(wVersionRequested,&wsaData);
if (0 != err)
{
cout<<"Socket failed";
return 0;
{
}
sockfd = socket(AF_INET,SOCK_STREAM,0);
if (INVALID_SOCKET == sockfd)
{
}
/*sockfd = socket(AF_INET, SOCK_STREAM, 0);*/
if (sockfd == -1)
{
}
my__family=AF_INET;
my__port=htons(SERVPORT);
my__addr.s_addr = INADDR_ANY;
memset( &(my__zero),0,8);
if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) == -1)
{
}
int n = 0;
while(1)
{
if (listen(sockfd, BACKLOG) != -1)
{
int sin_size = sizeof(struct sockaddr_in);
SOCKET nSocket = accept(sockfd, (struct sockaddr *) &remote_addr, &sin_size);
std::vector
std::vector
if (itr == itr_end)
{
client__back(nSocket);
printf( "received a connection from %sn", inet_ntoa(remote__addr));
DWORD dwPingThreadID;
HANDLE hPingHandle = CreateThread(0, 0, qtPingServerThreadFunc, 0, 0,
perror( "bind出错!");
//exit(1);
perror( "socket创建出错!");
exit(1);
cout<<"Soket Create Failed";
return 0;
WSACleanup();
return 0;
std::find(client_(),itr_end,nSocket);
&dwPingThreadID);


发布评论