Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 26 Май, 2012, 02:25:34

Страниц: [1] 2
Печать
Автор Тема: C++. Клиент-сервер - завершение преложений после создания соединения  (Прочитано 4365 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mr.Pihto    ↓ 
09 Ноябрь, 2009, 11:00:30
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

Мб кто подскажет почему мои клиент сервер не обмениваются сообщениями и выключаются при запуске одного из них несмотря на cin.get() - Ожидание ввода
клиент
Text
#include <stdio.h>
#include <iostream>
#include <winsock2.h>
int main(){
 
WSADATA WsaData;
    struct sockaddr_in peer;
    int s;
    int s1;
    int rc;
    char buf[1];
    int err = WSAStartup (0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
           printf ("WSAStartup() failed: %ld\n", GetLastError ());
           return 1;
    }
    peer.sin_family = AF_INET;
    peer.sin_port = htons(7500);
    peer.sin_addr.s_addr = inet_addr("127.0.0.1");
    s = socket(AF_INET,SOCK_STREAM,0);
    if (s<0){
        perror("socket error");
        exit(1);
    }else
        std::cout<<"Create sock: OK\n";
   
    rc = connect(s,(struct sockaddr*)&peer, sizeof(peer));
if (rc){
        perror("connect error");
        exit(1);
}else
    std::cout<<"Connected: OK\n";
 
    rc= send(s1,"2",1,0);
        if (rc<=0){
        perror("send error");
        exit(0);
        }else
            std::cout<<"Send: OK\n";
    rc = recv(s1,buf,1,0);
        if (rc<=0){
        perror("read error");
        exit(1);
        }else
            std::cout<<"Read: OK\n";
   
        printf("%c\n",buf[0]);
        std::cin.get();
return 0;
}
сервер
Text
#include <stdio.h>
#include <iostream>
#include <winsock2.h>
int main(){
 
WSADATA WsaData;
    struct sockaddr_in local;
    int s;
    int s1;
    int rc;
    char buf[1];
    int err = WSAStartup (0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
           printf ("WSAStartup() failed: %ld\n", GetLastError ());
           return 1;
    }
    local.sin_family = AF_INET;
    local.sin_port = htons(7500);
    local.sin_addr.s_addr = htonl(INADDR_ANY);
    s = socket(AF_INET,SOCK_STREAM,0);
    if (s<0){
        perror("socket error");
        exit(1);
    }else
        std::cout<<"Create sock: OK\n";
    rc = bind(s,(struct sockaddr*)&local, sizeof(local));
if (rc<0){
        perror("bind error");
        exit(1);
    }else
        std::cout<<"Bind: OK\n";
rc = listen(s,5);
if(rc){
    perror("listen error");
        exit(1);
}else
        std::cout<<"Listen: OK\n";
s1 = accept(s,NULL,NULL);
    if (s1<0){
        perror("accept error");
        exit(1);
    }else
            std::cout<<"Accept: OK\n";
    rc = recv(s1,buf,1,0);
        if (rc<=0){
        perror("read error");
        exit(1);
        }else
            std::cout<<"Read: OK\n";
        printf("%c\n",buf[0]);
        rc= send(s1,"2",1,0);
        if (rc<=0){
        perror("send");
        exit(0);
        }else
            std::cout<<"Send: OK\n";
            std::cin.get();
return 0;
}
Записан
krasun    ↓ 
10 Ноябрь, 2009, 01:32:30 , спустя 2 часа 32 минуты
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

попробуй два раза подряд, написать cin.get(),
Записан
phpdude    ↓ 
10 Ноябрь, 2009, 01:51:17 , спустя 18 минут 47 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

std::cin.get();
 
зы я не ззнаю с++ но мне кажется что это пиздеж какой то)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Mr.Pihto    ↓ 
10 Ноябрь, 2009, 02:00:55 , спустя 9 минут 38 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

phpdude, не. проверял. эта штука ждёт клавиши ентер.

попробуй два раза подряд, написать cin.get(),
не, не работает. но я кажись расковырял. позже надеюсь выложу эхо сервер с клиентом
Записан
phpdude    ↓ 
10 Ноябрь, 2009, 02:12:52 , спустя 11 минут 57 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

Mr.Pihto, ну ждать то ждет, а что дальше? :)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Mr.Pihto    ↓ 
10 Ноябрь, 2009, 02:39:01 , спустя 26 минут 9 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

ну вот оно у мну не ждало. а ведь доллжно было
Записан
phpdude    ↓ 
10 Ноябрь, 2009, 02:47:33 , спустя 8 минут 32 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

std::cin.get();
 
судя по логике тут ты пытаешься вызвать метод статического объекта ... ты тут ничего не забыл?
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
krasun    ↓ 
10 Ноябрь, 2009, 03:10:14 , спустя 22 минуты 41 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

phpdude, там все в порядке
Спустя 1 минуту 56 секунд добавил

phpdude, не. проверял. эта штука ждёт клавиши ентер.
на самом деле не только enter, что словить enter и нужно было два cin.get(), так как cin.get() ждет ввода символа одного, а enter - это \r\n, по этому я и посоветовал два cin.get(), так как первый схавает \r а второй \n. У меня была какая-то подобная проблема.
Спустя 4 минуты 17 секунд добавил
Mr.Pihto, обязательно покажешь как решил проблему
Записан
Mr.Pihto    ↓ 
10 Ноябрь, 2009, 06:56:51 , спустя 15 часов 46 минут 37 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22


std::cin.get();
 
судя по логике тут ты пытаешься вызвать метод статического объекта ... ты тут ничего не забыл?
это пространства имен. я его пишу и перед cout, cin и тд. Можно вообще в начале написать using namespace std;

Mr.Pihto, обязательно покажешь как решил проблему
циклом.. все рабтало но после завершения одной итерации прорсто выключалось. а 2 cin.get() думаю помогли бы т.к 1 не ловил..
 
Ура товарищи!
клиент
Java
#include <stdio.h>
#include <iostream>
#include <winsock2.h>
int main(){
 
WSADATA WsaData;
    sockaddr_in peer;
    int s;
    int s1;
    int rc;
    int err = WSAStartup (0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
           printf ("WSAStartup() failed: %ld\n", GetLastError ());
           return 1;
    }
while(true){
    peer.sin_family = AF_INET;
    peer.sin_port = htons(7500);
    peer.sin_addr.s_addr = inet_addr("127.0.0.1");
    s = socket(AF_INET,SOCK_STREAM,0);
    rc = connect(s,(sockaddr*)&peer, sizeof(peer));
char buf[100];
char buf2[100];
fgets(buf,100,stdin);
if(send(s,buf,100,0)!=0){
 
    std::cout<<"->Server: "<<buf;
}
    recv(s,buf2,100,0);
    std::cout<<"Server: "<<buf2<<"\n";
    closesocket(s);
}
return 0;
}
 
сервер
Java

#include <stdio.h>
#include <iostream>
#include <winsock2.h>
int main(){
 
WSADATA WsaData;
    struct sockaddr_in local;
    int s;
    int s1;
    int rc;
        int err = WSAStartup (0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
           printf ("WSAStartup() failed: %ld\n", GetLastError ());
           return 1;
    }
 
    local.sin_family = AF_INET;
    local.sin_port = htons(7500);
    local.sin_addr.s_addr = htonl(INADDR_ANY);
    s = socket(AF_INET,SOCK_STREAM,0);
    if (s<0){
        perror("socket error");
        exit(1);
    }else{
        std::cout<<"Create sock: OK\n";
           }
    rc = bind(s,(struct sockaddr*)&local, sizeof(local));
if (rc<0){
        perror("bind error");
        exit(1);
    }else{
        std::cout<<"Bind: OK\n";
           }
 
           rc = listen(s,5);
           if(rc){
               perror("listen error");
        exit(1);
           }else{
        std::cout<<"Listen: OK\n";
}
while(true){
s1 = accept(s,NULL,NULL);
        char buf[100];
        recv(s1,buf,100,0);
        std::cout<<"Client: "<<buf;
        send(s1,buf,100,0);
 
}
return 0;
}
Спустя 1 минуту 40 секунд добавил
если качаете -качайте clnt-srvr. второе прикрепление кривое.  я там поправлял..

* clnt-srvr.rar (8.83 Кб - загружено 175 раз.)
* clnt-srv.rar (8.83 Кб - загружено 115 раз.)
« Последнее редактирование: 10 Ноябрь, 2009, 06:56:51 от Mr.Pihto » Записан
Sinkler    ↓ 
10 Ноябрь, 2009, 10:34:10 , спустя
НЕ ХУЕТА! ХУЕТА!

Похуй, пляшем!
Группа: Джедаи

Карма: 73
Сообщений: 6811
Сила слова: 1.07

рульно, мне нравится
Записан

adw0rd    ↓ 
10 Ноябрь, 2009, 11:14:22 , спустя 40 минут 12 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67

Mr.Pihto, стиль меня твой убивает...
Text

        if (s<0){
                perror("socket error");
                exit(1);
        }else
                std::cout<<"Create sock: OK\n";
 
Спустя 1 минуту 25 секунд добавил
а оформление кода вообще пипец
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
krasun    ↓ 
10 Ноябрь, 2009, 12:10:20 , спустя 55 минут 58 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

и сделай код хотя бы C#, пусть выделяется
Записан
Mr.Pihto    ↓ 
10 Ноябрь, 2009, 05:31:13 , спустя 5 часов 20 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

krasun, чет тег C# не работает
Записан
krasun    ↓ 
10 Ноябрь, 2009, 05:44:09 , спустя 12 минут 56 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

у меня он тоже не работал, по этому я использовал java, я думаю, без разницы какой тег, главное, что бы подсветка была, а у языков все равно у всех синтаксис сишный
Записан
Mr.Pihto    ↓ 
14 Ноябрь, 2009, 05:15:54 , спустя 3 дня 23 часа 31 минуту 45 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

сделал я знач многопоточный сервер, чтоб можно было не один клиент подключать, но при дисконекте любого клиента  в окне сервера пишет такую срань
И<0иr/PA
тип того. мусор какойто
 
Java
#include <stdio.h>
#include <iostream>
#include <winsock2.h>
 
DWORD WINAPI ThreadFunc(LPVOID s1)
{
    SOCKET s2=((SOCKET *) s1)[0];
   char buf[100];
  
    recv(s2,buf,100,0);
                std::cout<<"Client: "<<buf;
                send(s2,buf,100,0);
    closesocket(s2);
    return 0;
}
 
int main(){
 
WSADATA WsaData;
        struct sockaddr_in local;
        int s;
        int rc;
        SOCKET s1;
                int err = WSAStartup (0x0101, &WsaData);
        if (err == SOCKET_ERROR)
        {
           printf ("WSAStartup() failed: %ld\n", GetLastError ());
           return 1;
        }
 
        local.sin_family = AF_INET;
        local.sin_port = htons(7500);
        local.sin_addr.s_addr = htonl(INADDR_ANY);
        s = socket(AF_INET,SOCK_STREAM,0);
        if (s<0){
                perror("socket error");
                exit(1);
        }else{
                std::cout<<"Create sock: OK\n";
           }
        rc = bind(s,(struct sockaddr*)&local, sizeof(local));
        if (rc<0){
                perror("bind error");
                exit(1);
        }else{
                std::cout<<"Bind: OK\n";
        }
 
        rc = listen(s,5);
        if(rc){
                perror("listen error");
                exit(1);
        }else{
                std::cout<<"Listen: OK\n";
        }
        while(true){
        s1 = accept(s,NULL,NULL);
        DWORD thID;
        CreateThread(NULL,NULL,ThreadFunc,&s1,NULL,&thID);
        }
 return 0;
}
« Последнее редактирование: 14 Ноябрь, 2009, 05:14:56 от Mr.Pihto » Записан
Страниц: [1] 2
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, artoodetoo