Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2010, 14:48   #1
Jasper92
Форумчанин
 
Аватар для Jasper92
 
Регистрация: 07.02.2009
Сообщений: 110
По умолчанию Чат через winsock

Помогите исправить ошибку в отправки сообщения. Клиент после подключения должен оправить Privet. Но после присоединения, клиент зависает.
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "winsock2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

SOCKET S,S1;
struct sockaddr_in SSA;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        //Этап №1 Подключение библиотеки
        WSADATA MyWSAData;
        int ErrWSADATA;
        if (WSAStartup(MAKEWORD(2,0), &MyWSAData)!=0)
        {
                Memo1->Lines->Add("Ошибка в библиотеки");
        }
        else
        {
                Memo1->Lines->Add("Библиотека Работает");
                //Этап №2 Создание сокета
                S=socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
                if (S==INVALID_SOCKET) Memo1->Lines->Add("Ошибка в Сокете");
                else  Memo1->Lines->Add("Сокет создан");
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        //Этап №3 Привязка адреса к сокету (Создание сервера)
        //struct sockaddr_in SSA;
        SSA.sin_family=AF_INET;
        SSA.sin_port=htons(2000);
        SSA.sin_addr.s_addr=INADDR_ANY;
        int ErrBind;
        ErrBind=bind(S,(LPSOCKADDR)&SSA,sizeof(SSA));
        if (ErrBind!=0) Memo1->Lines->Add("Ошибка в привязке адреса");
        else
        {
                Memo1->Lines->Add("Привязка адреса");
                int P;
                P=listen(S, SOMAXCONN);//Сервер ожидает подключения клиента.
                if (P!=0) Memo1->Lines->Add("Ошибка в Listen");
                else
                {
                        //int p;
                        Memo1->Lines->Add("Listen работает");
                        S1=accept(S,NULL, NULL);
                        if (S1==INVALID_SOCKET) Memo1->Lines->Add("Клиент не присоединился");
                        else Memo1->Lines->Add("Клиент присоединился");
                        char A[50];
                        while (recv(S,A,sizeof(A),0)!=SOCKET_ERROR)
                        {
                                Memo1->Lines->Add(A);
                                send(S1,A,sizeof(A),MSG_DONTROUTE);
                        }
                }
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        struct sockaddr_in SSA;
        SSA.sin_family=AF_INET;
        SSA.sin_port=htons(2000);
        SSA.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
        Memo1->Lines->Add("Привязка адреса");
        int ErrCon;
        ErrCon=connect(S, (struct sockaddr*)&SSA,sizeof(struct sockaddr));
        if (ErrCon!=0) Memo1->Lines->Add("Не могу соединиться с сервером");
        else
        {
                Memo1->Lines->Add("соединился с сервером");
                char A[50];
                send(S,"Privet",sizeof("Privet"),MSG_DONTROUTE);
                while (recv(S,A,sizeof(A),0)!=SOCKET_ERROR)
                {
                        Memo1->Lines->Add(A);
                        send(S1,A,sizeof(A),MSG_DONTROUTE);
                }
        }
}
//---------------------------------------------------------------------------
Jasper92 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с BlueTooth через WinSock. Пепел Феникса Win Api 4 11.11.2010 21:28
Winsock n3sh C/C++ Сетевое программирование 2 25.07.2010 17:55
пример передачи картинки на хост через winsock ? cable Работа с сетью в Delphi 0 10.07.2010 18:13
Как написать Голосовой чат, через интернет. visual basic 2005 Serotonin Помощь студентам 1 08.09.2009 01:05
SSL через WinSock или через что? Jolyk Win Api 2 07.06.2008 17:37