已有17人关注
Help!
发表在C++图书答疑 2018-11-18 《零基础学C++》第17章 网络通信
是否精华
版块置顶:
在devc++下运行会报错

2345截图20181118105746.png

源码:

#include <iostream>
#include <stdlib.h>
#include "winsock2.h"						//引用头文件
#pragma comment (lib,"ws2_32.lib")		    //引用库文件
using namespace std;
//线程实现函数
DWORD WINAPI threadpro(LPVOID pParam) 
{
	SOCKET hsock=(SOCKET)pParam;
	char buffer[1024] = {0};
	char sendBuffer[1024];
	if(hsock!=INVALID_SOCKET)
		cout << "Start Receive" << endl;
	
	while(1)												//循环接收发送的内容
	{
		int	num= recv(hsock,buffer,1024,0);					//阻塞函数,等待接收内容
		if(num>=0) 
			cout << "Receive form clinet "<< buffer  << endl;
		cout << WSAGetLastError() << endl;
		if(!strcmp(buffer,"A"))
		{
			memset(sendBuffer,0,1024);
			strcpy(sendBuffer,"B");
			int ires=send(hsock,sendBuffer,sizeof(sendBuffer),0);	//回送信息
			cout << "Send to client" << sendBuffer << endl;
		}
		else if(!strcmp(buffer,"C"))
		{
			memset(sendBuffer,0,1024);
			strcpy(sendBuffer,"D");
			int ires=send(hsock,sendBuffer,sizeof(sendBuffer),0);	//回送信息
			cout << "Send to client" << sendBuffer << endl;
		}
		else if(!strcmp(buffer,"exit"))
		{
			cout << "Client Close" << endl;
			cout << "Server Process Close" << endl;
			return 0;
		}
		else
		{
			memset(sendBuffer,0,1024);
			strcpy(sendBuffer,"ERR");
			int ires=send(hsock,sendBuffer,sizeof(sendBuffer),0);
			cout << "Send to client" << sendBuffer << endl;
		}
	}
	return 0;
}
//主函数
int main()
{
	WSADATA wsd;						//定义WSADATA对象
	DWORD err = WSAStartup(MAKEWORD(2,2),&wsd);
	cout << err << endl;
	SOCKET  	m_SockServer;
	sockaddr_in serveraddr;
	sockaddr_in serveraddrfrom;
	SOCKET m_Server[20];
	
	serveraddr.sin_family = AF_INET;			//设置服务器地址家族
	serveraddr.sin_port = htons(4600);			//设置服务器端口号
	serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	
	m_SockServer = socket ( AF_INET,SOCK_STREAM,  0);
	
	int i=bind(m_SockServer,(sockaddr*)&serveraddr,sizeof(serveraddr));
	cout << "bind:" << i << endl;
	
	int iMaxConnect=20;						//最大连接数
	int iConnect=0;
	int iLisRet;
	char buf[]="THIS IS SERVER\0";			//向客户端发送的内容
	char WarnBuf[]="It is voer Max connect\0";
	int len=sizeof(sockaddr);
	while(1)
	{
		iLisRet=listen(m_SockServer,0);		//进行监听
		//同意建立连接
		m_Server[iConnect]=accept(m_SockServer,(sockaddr*)&serveraddrfrom,&len); 
		
		if(m_Server[iConnect]!=INVALID_SOCKET)
		{
			//发送字符过去
			int ires=send(m_Server[iConnect],buf,sizeof(buf),0);            
			cout << " accept" << ires<< endl;//显示已经建立连接次数                   
			iConnect++;
			if(iConnect > iMaxConnect)
			{
				int ires=send(m_Server[iConnect],WarnBuf,sizeof(WarnBuf),0);
			}
			else
			{
				HANDLE m_Handle;		//线程句柄
				DWORD nThreadId = 0;	//线程ID
				m_Handle = (HANDLE)::CreateThread(NULL,
					0,threadpro,(LPVOID)m_Server[--iConnect],0,&nThreadId );//启动线程
			}
		}
	}
	WSACleanup();	
}


分享到:
精彩评论 1
李木子
学分:2954 LV11
2018-11-19
沙发

你好:

   是哪本书上的内容 建议用VC6试试

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照