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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章