C++ http服务器和客户端代码

服务器代码
	SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);
	int send_len = 0;
	int recv_len = 0;
	//定义服务端套接字,接受请求套接字
	SOCKET s_server;
	//服务端地址客户端地址
	SOCKADDR_IN server_addr;
	//初始化套接字库
	WSADATA wsadata;
	WSAStartup(0x22, &wsadata);	
	//填充服务端地址信息
	//填充服务端信息
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	server_addr.sin_port = htons(80);
	std::string msgstr="";
	//创建套接字
	s_server = socket(AF_INET, SOCK_STREAM, 0);
	int result = bind(s_server,(struct sockaddr *) &server_addr,sizeof(server_addr));
    if (result == SOCKET_ERROR) /* 绑定失败 */
    {
        closesocket(s_server);
        printf("[Web] Fail to bind, error = %d\n", WSAGetLastError());
        return -1; 
    }
	if (listen(s_server,SOMAXCONN)==-1) {
		int err = GetLastError();
		std::cout << "服务器启动失败!" << std::endl;
		std::cout << err << std::endl;
	}
	else {
		std::cout << "服务器启动成功!" << std::endl;
	}
	while(1){
		SOCKADDR_IN from_addr;   /* 客户端地址  */
		socklen_t from_len = sizeof(from_addr);
		std::string reponse_data="404";
		SOCKET acpt_soc = accept(s_server,(struct sockaddr *) &from_addr,&from_len);
        if (acpt_soc == INVALID_SOCKET) /* 接受失败 */
        {	int err = GetLastError();
            printf("接收失败1", WSAGetLastError());
			std::cout << err << std::endl;
            break; 
        }
			char recv_buf [1025] = "";
			recv_len = recv(acpt_soc,recv_buf,1025, 0);
			if (recv_len < 0) {
			std::cout << "接收失败2!" << std::endl;
			}else{
			std::cout << "接收成功!" << std::endl;
			std::cout << recv_buf << std::endl;
			}
			send_len = send(acpt_soc,recv_buf,strlen(recv_buf), 0);
			if (send_len < 0) {
				std::cout << "发送失败!" << std::endl;
				closesocket(acpt_soc);
			}else{
				std::cout << "发送成功!" << std::endl;
			}
	}
	//关闭套接字
	closesocket(s_server);
	//释放DLL资源
	WSACleanup();
客户端代码
	SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);
		//printf("客户端嵌套字已经打开!\n");
	int send_len = 0;
	int recv_len = 0;
	//定义服务端套接字,接受请求套接字
	SOCKET s_server;
	//服务端地址客户端地址
	SOCKADDR_IN server_addr;
	//初始化套接字库
	WSADATA wsadata;
	WSAStartup(0x22, &wsadata);	
	//填充服务端地址信息
	//填充服务端信息
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	server_addr.sin_port = htons(12580);
	string msgstr="";
	//创建套接字
	s_server = socket(AF_INET, SOCK_STREAM, 0);
	int nTimeout = 120000;
	//设置接收超时为1000ms
	if (SOCKET_ERROR == setsockopt(s_server, SOL_SOCKET, SO_RCVTIMEO, (char *)&nTimeout, sizeof(int)))
	{
		fprintf(stderr, "Set SO_RCVTIMEO error !\n");
	}
	if (connect(s_server, (SOCKADDR *)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
		cout << "服务器连接失败!" << endl;
		closesocket(s_server);
		//释放DLL资源
		WSACleanup();
		return 0;
	}
	else {
		cout << "服务器连接成功!" << endl;
	}
	//发送,接收数据
		cout << "开始传输桌面信息:"<< endl;
	while(1){
			char send_buf [1025] = "111";
			send_len = send(s_server,send_buf,strlen(send_buf), 0);
				if (send_len < 0) {
					cout << "发送失败!" << endl;
					closesocket(s_server);
					//释放DLL资源
					WSACleanup();
					return 0;
				}else{
					cout << "发送成功!" << endl;
				}
				char recv_buf [1025] = "";
				recv_len = recv(s_server,recv_buf,1025, 0);
				if (recv_len < 0) {
					cout << "接收失败!" << endl;
					closesocket(s_server);
					//释放DLL资源
					WSACleanup();
					return 0;
				}else{
					cout <<recv_buf<< endl;
					cout << "接收成功!" << endl;
				}
	}
	//关闭套接字
	closesocket(s_server);
	//释放DLL资源
	WSACleanup();

可以关注以下公众号交流:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值