все. У меня немного странная проблема с клиент-серверной программой. У меня есть два разных типа клиентов, пытающихся подключиться к одному серверу, один просто более скромный, чем другой, с меньшим количеством дел. Но в остальном они практически одинаковы. В то время как код barebone может подключаться к серверу, и сервер хорошо его принимает, сложная версия этого не может. Клиент говорит, что он подключен, отправляет сообщения (через send () и sendto ()) и получает количество отправленных байтов. Но сервер не распознает это. Я не совсем уверен, почему, особенно при сравнении обеих версий клиентов, они на самом деле одно и то же (по крайней мере, пока не вызывается connect ()), сложная версия имеет bind (), а версия barebone - нет. Кто-нибудь может увидеть проблему, почему эти очень похожие коды не работают одинаково: P
if (argc == 3)
{
host = argv[1]; // server address
info.c_name = argv[2];
}
else
{
printf("plz read the manual, kthxbai\n");
exit(1);
}
hp = gethostbyname(host);
if (!hp)
exit(1);
printf("host found\n");
// setting up address and port structure information
bzero((char * ) &server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(SERVER_PORT);
// opening up socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
exit(1);
else
printf("socket is opened: %i \n", sockfd);
info.sock_fd = sockfd;
// binding socket to a port: not in barebone version
rv = bind(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
if (rv < 0)
{
printf("MAIN: ERROR bind() %s\n", strerror(errno));
exit(1);
}
else
printf("socket is bound\n");
// connecting
rv = connect(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
printf("rv = %i\n", rv);
if (rv < 0)
{
printf("MAIN: ERROR connect() %i: %s\n", errno, strerror(errno));
exit(1);
}
else
printf("connected\n");
Я даже не уверен, в чем проблема, это сложная версия клиента или просто сервер? Спасибо за любое просвещение.