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 client_fd;

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::iterator itr_end = client_();

std::vector::iterator itr =

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);