问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用VC++建立一个TCP服务器,求例子看下

发布网友 发布时间:2022-04-25 20:15

我来回答

2个回答

热心网友 时间:2022-06-17 02:22

//这个是我自己写的,用来测试,编译通过
// t.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <WinSock2.h>
#include <string>
#include <sstream>
#include <memory>
#pragma comment (lib,"ws2_32.lib")
//HANDLE hevent;
DWORD WINAPI acceptpro(LPVOID lp);
DWORD WINAPI recvpro(LPVOID lp);
struct _cinf
{
SOCKET s;
HANDLE hevn;
SOCKADDR_IN saddr;
}cinf;

int flag=0;
CRITICAL_SECTION cc;

int _tmain(int argc, _TCHAR* argv[])
{
cinf.hevn=CreateEvent(NULL,false,false,NULL);
//cinf.hevn=WSACreateEvent();
InitializeCriticalSection(&cc);
WSADATA wsaData;
int err = WSAStartup( MAKEWORD(2,2),&wsaData);
if (err!=0)
{

WSACleanup();

}
SOCKET sListen;
// int a=4;
// int sendBufSize=1024*10;
//
// int fff=setsockopt(sListen,SOL_SOCKET,SO_RCVBUF,(char *)&sendBufSize,a);
// if (SOCKET_ERROR==fff)
// {
//
// cout<<"setsockopt error:"<<WSAGetLastError()<<endl;
//// continue;
// }

SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(8888);
addr.sin_addr.S_un.S_addr=inet_addr("192.168.232.129");
sListen=socket(AF_INET,SOCK_STREAM,0);
bind(sListen,(sockaddr *)&addr,sizeof(SOCKADDR_IN));
int error=listen(sListen,SOMAXCONN);
if (SOCKET_ERROR ==error)
{
cout<<"listen fail"<<endl;
}
// hevent=CreateEvent(NULL,false,false,NULL);
CreateThread(NULL,0,acceptpro,(LPVOID)&sListen,0,NULL);
char qq;
EnterCriticalSection(&cc);
cout<<" enter q quit "<<endl;
LeaveCriticalSection(&cc);
while(1)
{
cin>>qq;
if (qq=='q')
{
cout<<"结束server"<<endl;
// SetEvent(hevent);
closesocket(sListen);
break;
}
}
system("pause");
return 0;
}
DWORD WINAPI acceptpro(LPVOID lp)
{
EnterCriticalSection(&cc);
cout<<" acceptting "<<endl;
LeaveCriticalSection(&cc);
while(flag==0)
{
SOCKET sListen=*(SOCKET*)lp;
SOCKADDR_IN remoteAddr;
int len=sizeof(SOCKADDR_IN);
SOCKET snew=accept(sListen,(sockaddr *)&remoteAddr,&len);
if (INVALID_SOCKET==snew)
{
cout<<"accept error "<<"退出 accept线程"<<endl;
return 0;
}

// cinf.hevn=recvEvent;
cinf.s=snew;
cinf.saddr=remoteAddr;
WSAEventSelect(cinf.s,cinf.hevn,FD_READ);
//CreateThread(NULL,0,recvpro,(LPVOID)&cinf,0,NULL);
EnterCriticalSection(&cc);
cout<<"新连接,ip:"<<inet_ntoa(*(in_addr*)&(remoteAddr.sin_addr.S_un.S_addr))<<"port:"<<ntohs(remoteAddr.sin_port)<<endl;
LeaveCriticalSection(&cc);
}
}
DWORD WINAPI recvpro(LPVOID lp)
{
EnterCriticalSection(&cc);
cout<<"recv"<<endl;
LeaveCriticalSection(&cc);
while(1)
{

_cinf * minf=(_cinf*)lp;
cout<<"__wait__"<<endl;
DWORD re=WaitForSingleObject(minf->hevn,INFINITE);
//ResetEvent(minf->hevn);
cout<<"__set__"<<endl;
if (0==re)
{
/* char buf[512];
recv(minf->s,buf,512,0);
*/ int a=4;
int recvBufSize=0;
int fff=getsockopt(minf->s,SOL_SOCKET,SO_RCVBUF,(char *)&recvBufSize,&a);
if (SOCKET_ERROR==fff)
{
cout<<"setsockopt error:"<<WSAGetLastError()<<endl;
continue;
}
EnterCriticalSection(&cc);
cout<<" 连接,ip:"<<inet_ntoa(*(in_addr*)&(minf->saddr.sin_addr.S_un.S_addr))<<" port:"<<ntohs(minf->saddr.sin_port)<<" recvBufSize: "<<recvBufSize<<endl;
EnterCriticalSection(&cc);
// WSAEventSelect(minf->s,cinf.hevn,FD_READ);
//WSASetEvent(minf.hevn);
}
else
{
cout<<"re="<<re<<endl;
// cout<<"连接,ip:"<<inet_ntoa(*(in_addr*)&(minf.saddr.sin_addr.S_un.S_addr))<<"port:"<<ntohs(minf.saddr.sin_port)<<"WaitForSingleObject:error "<<endl;
}
}
}

热心网友 时间:2022-06-17 02:23

wsastartup()->socket()->bind()->listen()->recv/send->clearwsa()->closesocket()
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
泰迪必备用品有哪些? 养泰迪狗新手需要准备什么东西 谁知道白色泰迪狗的生活用品需要哪些? 美国什么选举时间 离西双版纳最近的地州必去景点 技嘉945GCM-S2L ( 英特尔 945G )主板配什么显卡好 5年的台式电脑了想更新配置,反应速度有点慢。该如何提高,求大神指教... e2160超频设置 如何将多个excel表格合并成一个如何把多个工作簿合并成一个excel 上海社保最低比例是多少钱 TCP服务器和客户机编程 TCP服务器是什么 网页制作,,,公式计算器 第二件半价和两件八折哪个促销力度大 什么是FOB价格,在外贸上用的很多 fob价格如何算 如何用科学计算器及EXCEL算递增总和? 广东这边谈生意为什么喜欢用计算器说价钱呢 ? cif的价格计算 已知报价10.75,折扣了5.38,怎么算实际价格 以7000元一亩地计算0-132亩应该多少钱? 铜件产品怎么算价格 FOB价格计算器是什么 JavaScript 一个很简单计算器的问题 计算价格 四川顺丰到各地快递价格表急 100高分悬赏:利用excel,批次 件数 单价(可以是整数,可以保留小数点一位) 如何算出单价 文件不见了,怎么能找回来 谁能给个少年包青天1周杰版高清的下载地址。迅雷5.几G的不怎么清晰 求个手机的MP4G视频格式转换器 要免费好用的 收费试用注册的不要! 怎样在自己电脑上建立一个TCP服务器 什么是TCP服务器 TCP服务端是什么 TCP服务器性能如何测试? 如何用C#实现多线程TCP协议的服务器端程序 tcp并发服务器通讯模型有哪些 如何启动一个TCP套接字连接和js写的东西吗 怎么用多线程实现TCP并行服务器,服务 用SELECT模型构建一个TCP服务器!!WINSOCK编程 TCP服务器怎么获得客户端socket连接的IP TCP服务器最大能支持多少长连接 吉利汽车显示安全气囊故障怎么回事? 汽车安全气囊故障灯亮分哪几种具体情况及每种情况的相关解决方法? 超过保养时间,一直用车有哪些安全故障? 我刚从香港买了这种MCT德国特强消石素150粒装,请问是不是正货呢? 汽车60个常见故障是什么? 德国的强力消石片对治疗胆结石有用吗?可以彻底治好吗 德国博士商标强力消石素治疗哪种结石 汽车安全气囊显示故障怎么回事? 我托朋友在香港买了五瓶德国特强消石素,第一瓶包装是波玻璃,比较高