Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Сервер - Клиент


Автор: script4u 27.2.2009, 20:17
Вообщем есть клиент:
Код

#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
    char buff[1024];
    char a[6] = "hello";
    WSAStartup(0x202, (WSADATA *)&buff[0]);
    SOCKET my_sock;
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in dest_addr;
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port =htons(666);
    HOSTENT *hst;
    dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr));
    int t = send(my_sock, (char*)&a, (int)sizeof(a), 0);
    cout << "\n" << t;
    Sleep(10000);
    closesocket(my_sock);
    return 0;
}

И сервер:
Код

#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
    char buff[1024];
    char k[6];
    WSAStartup(0x0202, (WSADATA *)&buff[0]);
    SOCKET mysocket;
    mysocket = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(666);
    local_addr.sin_addr.s_addr = 0; 
    bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr));
    listen(mysocket, 5);
    accept(mysocket, NULL, NULL);
    recv(mysocket, (char*) &k, 6, 0);
    cout << k;
    Sleep (10000);
    return 0;
}


Клиент отправляет данные и сервер их получает, но не выводит их, в чем может проблема?

Еще есть вопрос: объявленные мной переменные (или массивы)  - не пустые, в них лежат левые данные. Так и должно быть? Это связанно как-то с очисткой памяти? 
PS знаю код кривой, но я новичок smile 

Автор: ex386 27.2.2009, 20:25
в функции recv вы принимаете данные на слушающий сокет mysocket.
необходимо написать следующее:
Код

SOCKET client = accept(mysocket, NULL, NULL);
recv(client, (char*) &k, 6, 0);


так возможно заработает  smile 

Автор: script4u 27.2.2009, 20:29
Точно! Спасибо, работает.

А как насчет вопроса про память?

Автор: zim22 27.2.2009, 20:29
если хочешь, чтобы "правые" данные лежали в массивах, то инициализируй их при определении:
Код

char buff[1024] = {0};
char k[6] = {0};

плюс в клиенте зачем тебе эта строчка? smile ведь ты к ней не обращаешься ни разу.
Код

HOSTENT *hst;

Автор: script4u 27.2.2009, 20:32
Цитата(zim22 @ 27.2.2009,  20:29)
плюс в клиенте зачем тебе эта строчка? smile ведь ты к ней не обращаешься ни разу.
Код

HOSTENT *hst;


Пережиток прошлого =)

Автор: ex386 27.2.2009, 20:35
Вместо buff[1024] лучшеб объявить структуру WSADATA чтоб все было по правилам  smile.
А насчет остальных структур, там все нормально  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)