Avatar billede mad_man Nybegynder
30. december 2003 - 15:58 Der er 8 kommentarer og
1 løsning

kalde en funktion.

unit1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>
#include <winsock.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

SOCKET thesocket;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::modtag()
{
    char recvbuf[1024];
    char buf[10000] = "";
    int test;

    while(1)
    {
        strcpy(buf,"efter loop");
        strcat(buf,"\r\n");
        strcat(buf,Memo1->Text.c_str());
        Memo1->Text = buf;

        memset(recvbuf, 0, 1024);
        test = recv(thesocket,recvbuf,256,0); //ioctlsocket(thesocket, FIONBIO, &v);
        if(test == INVALID_SOCKET)
      {
            WSACleanup();
            return;
      }
        strcpy(buf,recvbuf);
        strcat(buf,"\r\n");
        strcat(buf,Memo1->Text.c_str());
        Memo1->Text = buf;
        Sleep(100);
    }
}

DWORD WINAPI modt(void* sock_)
{
    modtag();
    return 1;
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int port = 12345;
    char host[32] = "madman";
    WORD sockversion;
    WSADATA wsadata;
    sockversion = MAKEWORD(1,1);
    WSAStartup(sockversion, &wsadata);
    LPHOSTENT hosten;
    hosten = gethostbyname(host);


    thesocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(thesocket == INVALID_SOCKET)
    {
        WSACleanup();
        return;
    }
    SOCKADDR_IN server;
    server.sin_family = AF_INET;
    server.sin_addr = *((LPIN_ADDR)*hosten->h_addr_list);
    server.sin_port = htons(port);
    int test;
    test = ::connect(thesocket,(LPSOCKADDR)&server,sizeof(struct sockaddr));
    if(test == INVALID_SOCKET)
    {
        WSACleanup();
        return;
    }
    char recvbuf[1024];
    char buf[10000] = "";

    strcpy(buf,"inden loop");
    strcat(buf,"\r\n");
    strcat(buf,Memo1->Text.c_str());
    Memo1->Text = buf;

    DWORD nThreadID;
    CreateThread(0, 0, modt,(void*)thesocket, 0, &nThreadID);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
      closesocket(thesocket);
    WSACleanup();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char buf[1024] = "";
    strcpy(buf,Edit1->Text.c_str());
    int test;
    test = send(thesocket,buf,strlen(buf),0);
    if(test == INVALID_SOCKET)
          {
                WSACleanup();
                return;
          }
}
//---------------------------------------------------------------------------

unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMemo *Memo1;
        TEdit *Edit1;
        TButton *Button1;
        TButton *Button2;
        TButton *Button3;
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall modtag();
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Det jeg skal have kaldt modtag() fra DWORD WINAPI modt(void* sock_) hvordan skal det gøres.. når jeg compiler min kode så kommer den med Call to undefined function 'modtag'
Avatar billede arne_v Ekspert
30. december 2003 - 16:03 #1
DWORD WINAPI modt(void* sock_)
{
    modtag();
    return 1;
}

kalder en C style funktion modtag.

void __fastcall TForm1::modtag()
{

definerer en modtag metode i klassen TForm1.

Ikke det samme.
Avatar billede squashguy Nybegynder
30. december 2003 - 16:03 #2
Form1->modtag()
Avatar billede mad_man Nybegynder
30. december 2003 - 16:05 #3
squahguy tak det var lige det jeg skulle bruge.. vil du ha point så smid lige et svar
Avatar billede mad_man Nybegynder
30. december 2003 - 16:16 #4
int port = 12345;
    char host[32] = "madman";
    strcpy(host,Edit2->Text.c_str());
    strcpy(port,Edit3->Text.c_str());

hvordan laver jeg noget fra en edit box om til tal ???
Avatar billede mad_man Nybegynder
30. december 2003 - 16:17 #5
ik som jeg har prøvet det kan jeg se =) det er port tingen der ik vil virke
Avatar billede squashguy Nybegynder
30. december 2003 - 16:18 #6
port = Edit3->Text.ToInt();
Avatar billede arne_v Ekspert
30. december 2003 - 16:18 #7
port = atoi(Edit3->Text.c_str());
Avatar billede mad_man Nybegynder
30. december 2003 - 16:19 #8
tak =) så får du point
Avatar billede squashguy Nybegynder
30. december 2003 - 17:04 #9
hvis du ikke med sikkerhed ved, at edit3 indeholder et gyldigt tal, kan du fange den sådan:

try{
  port = Edit3->Text.ToInt();
}catch(EConvertError &e){
  // tja
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester