Необходимо посылать следующию команду только после ответа на предыдущию. Причем вся запара была в точном размере команды для сервера, иначе посылаются непонятные символы и сервак их не понимает. Вот рабочий пример.
| Код | #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <strings.h>
int main () { int sockfd; int len; struct sockaddr_in address; int result; char buf[2][30] = {"a1 login viking13 s424695\r\n\0", "a2 logout\r\n"}; char buf1[2][120];
sockfd = socket(PF_INET,SOCK_STREAM,0);
address.sin_family = PF_INET; address.sin_addr.s_addr = inet_addr("217.77.54.97"); address.sin_port = htons(143); len = sizeof(address); result = connect(sockfd, (struct sockaddr *) &address,len); if (result == -1){ perror("oops : client1 "); exit(1); }
send(sockfd, buf[0], strlen(buf[0]), 0); strcpy(buf1[0], "\0"); while(strlen(buf1[0])==0) recv(sockfd, buf1[0], 70,0); printf("%s\n",buf1[0]); send(sockfd, buf[1], strlen(buf[1]), 0); strcpy(buf1[1], "\0"); while(strlen(buf1[1])==0) recv(sockfd, buf1[1], 70,0); printf("%s\n",buf1[1]); close(sockfd); exit(0);
}
|
|