C++多线程SOCKET通信研究日志

近期在研究C++程序,基本思路:作为服务接受监听4500端口,当存在一个连接时,创建一个新的线程,并在线程中实现数据的接受和发送工作,为了避免因收发造成的阻塞,可以创建2个线程用于收和发送。

思路2:通过选择的模式进行数据匹配发送数据,发一次关一次。暂定思路,以下代码并不完整,仅供本人研究

#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

int signal[100];     //建立的套字接描诉符号。  
int undernum = 1;//每个套字接描诉符号对应的下标 
//多线程
DWORD WINAPI run(LPVOID p)

printf("three%d run..\n",p);
//Sleep((DWORD)p*3000);
//return (DWORD)p;
 while(1){
     //CODES 
 }
}
int main()
{
WSADATA wsaData;
HANDLE three[255];    //线程
DWORD dwThId[255];    // 线程id号 
int undernum=0;   //角标
WORD sockVersion = MAKEWORD(2, 2);
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
// 创建套节字
SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("socket error\n");
return 0;

// 在sockaddr_in结构中装入地址信息
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4500); // htons函数 将主机的无符号短整形数转换成网络
//字节顺序
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 使套接字和本地地址绑定
if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf(" bind error \n");
closesocket(sListen);
return 0;
}
// 设置套接字进入监听模式
if(listen(sListen, 5) == SOCKET_ERROR)
{
printf("listen error\n");
closesocket(sListen);
return 0;
}
// 循环接受客户的连接请求
sockaddr_in remoteAddr; 
SOCKET sClient;
int nAddrLen = sizeof(remoteAddr);
char revData[255];
while(TRUE)
{
// 接受一个新连接
 signal[0]=sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
 //accept函数调用失败则继续等待连接。
 if(sClient == INVALID_SOCKET)
 {
 printf("not client connet");
 //printf("accept() error");
 continue;
 }
 //打印出连接者的ip
 printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
 three[undernum]=CreateThread(NULL,0,run,(LPVOID)undernum,0,&dwThId[undernum]); //创建一个线程
 undernum++;
}


//线程


//three[1]=CreateThread(NULL,0,run,(LPVOID)1,0,&dwThId[0]);
//three[2]=CreateThread(NULL,0,run,(LPVOID)2,0,&dwThId[1]);
//system("pause");

/*
// CloseHandle(three1); // 关闭线程句柄并不影响线程的执行
CloseHandle(three2); 
return EXIT_SUCCESS;
*/
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值