#include using namespace std; #include #include #include #include #include #include #define SIZE 1024 void connectToClient(int &clientfd) { char recvBuf[SIZE]; // 接收缓冲区 char sendBuf[SIZE]; // 发送缓冲区 int recvRet, sendRet; // 接受反馈及发送反馈 while (clientfd != -1) { // receive data recvRet = recv(clientfd, recvBuf, sizeof(recvBuf), 0); while(recvRet > 0) { recvBuf[recvRet] = '\0'; if(strcmp(recvBuf, "$") == 0) break; cout << "recv data from client " << clientfd << ", data : " << recvBuf << endl; recvRet = recv(clientfd, recvBuf, sizeof(recvBuf), 0); } // // send data // cout << clientfd << ">> "; // cin >> sendBuf; // while(sendBuf) { // sendRet = send(clientfd, sendBuf, sizeof(sendBuf), 0); // if (strcmp(sendBuf, "$") == 0) // break; // if (sendRet == -1) // cout <<"send data error." << endl; // else // cout << "Sent data to client: " << sendBuf << endl; // cout << clientfd << ">> "; // cin >> sendBuf; // } // // 是否关闭连接 // recvRet = recv(clientfd, recvBuf, sizeof(recvBuf), 0); // if (recvRet == -1) // cout << "Error receiving data\n"; // else if(strcmp(recvBuf, "y") == 0) { // cout << "Have closed connection " << clientfd << '.' << endl; // close(clientfd); // break; // } } } int main() { // create socket int serverfd = socket(AF_INET, SOCK_STREAM, 0); // IPV4 + TCP if(-1 == serverfd) { printf("create socket error"); return -1; } // bind port struct sockaddr_in bindaddr; bindaddr.sin_family = AF_INET; bindaddr.sin_addr.s_addr = htonl(INADDR_ANY); bindaddr.sin_port = htons(30030); if(-1 == bind(serverfd, (struct sockaddr *)&bindaddr, sizeof(bindaddr))) { cout << "bind error" << endl; return -1; } // start listen if (listen(serverfd, 1024) == -1) { printf("listem error"); return -1; } while (1) { struct sockaddr_in clientaddr; socklen_t clientaddrlen = sizeof(clientaddr); // accept connection int clientfd = accept(serverfd, (struct sockaddr *)&clientaddr, &clientaddrlen); if(clientfd!= -1) { // 获取客户端的信息 char cliIp[16]; inet_ntop(AF_INET, &clientaddr.sin_addr.s_addr, cliIp, sizeof(cliIp)); unsigned short cliPort = ntohs(clientaddr.sin_port); cout << "client ip is : " << cliIp << ", port is : " << cliPort << endl; connectToClient(clientfd); } } //close socket close(serverfd); return 0; }