klient winsock

NI
  • Rejestracja:około 11 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Warszawa
  • Postów:535
0

mam taki problem z klientem... na zajęciach wysyłał dane na inny port niż mu podałem a z moim serwerem nie chce się połączyć...
w poradniku było tylko napisane "zatelnetuj się na niego telnet hostname 9034"
1.Nie mam pojęcia co to znaczy...
2.z kąd mam wziąć to hostname(jak)...
Reszta chyba działa ale mam problemy z łączeniem się(tutorial nie pomógł).
Kolega łączył się z serwerem i podawał ip i port... jak to może się odnosić do klienta? czy to hostname ma być ip czy czymś innym?

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <iostream>
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <cstdlib>
#define MYPORT 9034
using namespace std;
int main(void)
{
    int sockfd;
    struct sockaddr_in their_addr; // informacja o adresie osoby łączącej się
    struct hostent * he;
    int numbytes;
    string hostname="localhost",port="9034";
    if(( he = gethostbyname(hostname.c_str()) ) == NULL ) { // pobierz informacje o hoście
        perror( "gethostbyname" );
        exit( 1 );
    }

    if(( sockfd = socket( AF_INET, SOCK_DGRAM, 0 ) ) == - 1 ) {
        perror( "socket" );
        exit( 1 );
    }

    their_addr.sin_family = AF_INET; // host byte order
    their_addr.sin_port = htons( MYPORT ); // short, network byte order
    their_addr.sin_addr = *(( struct in_addr * ) he->h_addr );
    memset( &( their_addr.sin_zero ), '\0', 8 ); // wyzeruj resztę struktury

    if(( numbytes = sendto( sockfd,port.c_str(), strlen(port.c_str() ), 0,
    ( struct sockaddr * ) & their_addr, sizeof( struct sockaddr ) ) ) == - 1 ) {
        perror( "sendto" );
        exit( 1 );
    }

    printf( "sent %d bytes to %s\n", numbytes,
    inet_ntoa( their_addr.sin_addr ) );

    close( sockfd );
    system("pause");
    return 0;
}
 

Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
edytowany 1x, ostatnio: Niikelion
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
  1. start -> uruchom -> telnet
  2. localhost albo 127.0.0.1

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostałe 6 komentarzy
NI
serwer już sprawdzałem tym dawno i działa :) a gra nie ma tylko lan z powodu "małych" komplikacji
Shalom
Nie wierzę. Ten kod wyżej to jest gwarantowana nagroda w kategorii "WTF tygodnia", a to sie nie zdarza żeby ktoś był dobrym koderem i przypadkiem coś takiego popełnił.
NI
czego ode mnie wymagasz po pół roku kursu podstawowego c++... szybko się uczę ale winsockety mi akurat nie idą
NI
na zajęciach też nikt nie umie tego naprawić...
NI
czy tego nie da się naprawić? czy po prostu mam zły komputer?
NI
  • Rejestracja:około 11 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Warszawa
  • Postów:535
0

Czemu cały czas mi wywala:

Kopiuj
gethostbyname No Error 

? nie widzi serwera ale czemu?
Podałem nazwę i port... co jeszcze musze zrobić?


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0
  1. gethostbyname radze unikac.
  2. Wypisuj sobie zmienna errno/WSAGetLastError na stderr i sprawdzaj co poszlo nie tak...
Zobacz pozostały 1 komentarz
NI
gdzie stderr? ja tego nie mam
n0name_l
To znaczy, ze trzeba spojrzec do jakichs docsow: http://www.virtsync.com/c-error-codes-include-errno
NI
jestem załamany program pisze mi 2 razy no error a potem się zawiesza i zamyka... jak mam go połączyć z serwerem bo mi się kończą pomysły... w poradniku pisali, że będzie działać i działa tylko serwer...
NI
teraz to nie mam pojęcia co mam zrobić, żeby się łączył, teoretycznie wszystko jest poprawnie... jest port nazwa hosta...
NI
to co mi dąłeś pisze no error a reszta zamyka program bo wykryto błąd... wtf?
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1
Kopiuj
#include "stdafx.h"

#include <winsock2.h>
#include <cstdio>
#include <cstdlib>

void exit_with_error(const char* msg)
{
    printf("error: %d\tmsg: %s\n", WSAGetLastError(), msg);
    exit(-1);
}

int _tmain(int argc, _TCHAR* argv[])
{
    WSAData wsadata;
    WSAStartup(MAKEWORD(2, 2), &wsadata);

    SOCKET sockfd;
    struct sockaddr_in addr;
    struct hostent* host;

    if ((host = gethostbyname("192.168.0.10")) == NULL) {
        exit_with_error("gethostbyname");
    }

    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(12345);
    addr.sin_addr.s_addr = *(u_long*)host->h_addr_list[0];

    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
        exit_with_error("socket");
    }

    int bytes;
    const char* msg = "jakas tam wiadomosc";
    if ((bytes = sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr*)&addr, sizeof(addr))) < 0) {
        exit_with_error("sendto");
    }

    printf("sent %d bytes to %s\n", bytes, inet_ntoa(addr.sin_addr));

    closesocket(sockfd);
    WSACleanup();

    return 0;
}

Dziala, sprawdzane (VS 2013).

NI
dzięki działa poprawnie
NI
boże jaki głupi błąd miałem... ale teraz działa dzięki wielkie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.