Witam. Potrzebuje wyjasnienia, skad wziasc wszystkie biblioteki odnosnie socket, i w ogole lacznosci programu przez internet. Druga sprawa to, jak je zainstalowac, czy ja mam je po prostu wkleic do ?://Dev Cpp/includes/ ?
Jak masz gcc to wszystko co jest potrzebne do socketow juz masz, a poza tym na windowsie do projektu trzeba dodac ws32.lib, czy jakos tak ;p
Socket? Na pewno o nagłówek Ci chodzi? http://www.sockets.com/winsock.htm
To w takim razie dajcie mi jakis najkrotszy przyklad zastosowania tego "Winsock"
Badnick napisał(a)
To w takim razie dajcie mi jakis najkrotszy przyklad zastosowania tego "Winsock"
wyszukiwarka na forum nie dziala, czy google ?
Na MSDN-ie przy omówieniu winsock i konkretnych funkcji przykładowego kodu jest od metra i ciut ciut.
Znalazlem taki kod:
#include <string>
#include <winsock2.h>
WORD version = MAKEWORD(2,2); // używamy wersji 2.2
WSADATA wsaData; // nasze WSA
if(!WSAStartup(version, &wsaData)) // tworzymy WSA
{
// mamy błąd, WSA nie chce sie zainicjować
cout << "Błąd inicjalizacji WSA" << endl;
WSACleanup(); // usuwamy WSA
return 1;
}
if( LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2 )
{
cout << "Nieprawidłowa wersja" << endl;
WSACleanup(); // usuwamy WSA
return 1;
}
Tylko nie chce mi dzialac, nie wiadomo czemu, znalazlem go w jakims tutorialu. Oto log kompilacji:
#include <string>
#include <winsock2.h>
WORD version = MAKEWORD(2,2); // używamy wersji 2.2
WSADATA wsaData; // nasze WSA
if(!WSAStartup(version, &wsaData)) // tworzymy WSA
{
// mamy błąd, WSA nie chce sie zainicjować
cout << "Błąd inicjalizacji WSA" << endl;
WSACleanup(); // usuwamy WSA
return 1;
}
if( LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2 )
{
cout << "Nieprawidłowa wersja" << endl;
WSACleanup(); // usuwamy WSA
return 1;
}
SORKI POMYLKA: Log kompilacji :
Kompilator: Default compiler
Building Makefile: "C:\Documents and Settings\KUBA.RODZINA\Pulpit\cwiczenia\proba sock\Makefile.win"
Wykonywanie make...
make.exe -f "C:\Documents and Settings\KUBA.RODZINA\Pulpit\cwiczenia\proba sock\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
main.cpp:7: error: expected unqualified-id before "if"
main.cpp:7: error: expected `,' or `;' before "if"
main.cpp:14: error: expected unqualified-id before "if"
main.cpp:14: error: expected `,' or `;' before "if"
make.exe: *** [main.o] Error 1
Wykonanie zakończone
Widziałeś kiedyś C++ na oczy? Zacznij od napisania hello-world, potem baw się gniazdkami.
No to napraw to jak taki madry jestes. Hello worldy mam juz dawno za soba
Badnick napisał(a)
Hello worldy mam juz dawno za soba
Tja, i w nich funkcji main nie używałeś?
Świętowit napisał(a)
Badnick napisał(a)
Hello worldy mam juz dawno za soba
Tja, i w nich funkcji main nie używałeś?
Yyy. ;p No moze uzywalem.
W takim razie zmienilem na cos takiego:
#include <iostream>
#include <string>
#include <winsock2.h>
using namespace std;
WORD version = MAKEWORD(2,2); // używamy wersji 2.2
WSADATA wsaData; // nasze WSA
SOCKET sListen, // nasze "ucho"
sClient; // nasz klient
int main(int argc, char *argv[])
{
if(!WSAStartup(version, &wsaData)) // tworzymy WSA
{
// mamy błąd, WSA nie chce sie zainicjować
cout << "Błąd inicjalizacji WSA" << endl;
WSACleanup(); // usuwamy WSA
return 1;
}
if( LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2 )
{
cout << "Nieprawidłowa wersja" << endl;
WSACleanup(); // usuwamy WSA
return 1;
}
sListen = socket( AF_INET, SOCK_STREAM, IPPROTO_IP);
if( sListen == SOCKET_ERROR ){
cout << "Nie mozna stworzyc ucha" << endl;
WSACleanup();
return 1;
}else
cout << "Yyyy, nie wiem po co to" << endl;
system("PAUSE");
return 1;
}
Skompilowalo sie, ale po wlaczeniu, program sie wylacza Od razu. Czy to ma tak dzialac?
sListen = socket( AF_INET, SOCK_STREAM, IPPROTO_IP);
if( sListen == SOCKET_ERROR ){
cout << "Nie mozna stworzyc ucha" << endl;
WSACleanup();
return 1;
}else
cout << "Yyyy, nie wiem po co to" << endl;
system("PAUSE");
return 1;
Przeczytaj jakis kurs, bo porazka bez kitu. Nie mozesz nasluchiwac dopoki gniazda nie zbindujesz, a jak zaczniesz juz nasluchiwac to lecisz z accept w petli na przyklad.
[wstyd] dobra ma sie wylaczac od razu, ja tam listen() widzialem a to zmienna jest
W tym kodzie tworzysz socketa i nic wiecej nie robisz ;)
Dobra, jakos sie udalo. Mam dzialajacego Klienta i Serwer. Tylko teraz mam nowy problem: Wysylanie wiadomosci do serwera:
string wiadomosc;
char buffer[DEFAULT_BUFFER];
recv(sClient, buffer, DEFAULT_BUFFER, 0);
label1:
cout << "Wiadomosc: ";
cin >> wiadomosc;
cout << "Odebrano: " << wiadomosc << endl;
send(sClient, buffer, strlen(buffer)+1, 0);
cout << "Wyslano: " << buffer << endl;
goto label1;
WSACleanup();
Kompletnie nie wiem jak zrobic, zeby wysylalo string "wiadomosc" na serwer. Probowalem zmieniac "buffer" na "wiadomosc", ale kompilator nie uznal tego za najlepszy pomysl.
BADNICK napisał(a)
Probowalem zmieniac "buffer" na "wiadomosc", ale kompilator nie uznal tego za najlepszy pomysl.
W dokumentacji wywołania systemowego send() masz odpowiedź dlaczego.
:) , Mozna dokladniej? Przygodę z WinSock zaczalem dzisiaj rano, wiec wiesz...
"Beej's guide by network programming" niech będzie Twoją drogą. Przyszły programista winien być z google za pan brat:
http://msdn.microsoft.com/en-us/library/ms740149(VS.85).aspx
Nie zwiazane z gniazdami pod Windows, ale sie podziele, moze komus sie przyda kodzik krotki pod Linuksa. Jednej rzeczy mu brakuje do minimalnej funkcjonalnosci, jaka zaplanowalem, ale mysle, ze nie problem printf uzyc ;p
http://pastebin.com/Nyuh5cuJ
"Beej's guide by network programming" niech będzie Twoją drogą
Właśnie ,leżą gdzieś te sockety na 4p , ale ta szukajka forumowa normalnie mnie rozwala , własny odłożony z 4p :
http://win32prog.republika.pl/ebook/prsoc.pdf
@t0m_k-tmp: Prowadzisz wg mnie najbardziej efektywny sposób krucjaty jaki do tej pory widziałem ;-P
@several: Tak wrzucilem, po co sie ma marnowac, ja tylko sobie dodam filtracje i ladne wyswietlanie zrobie, no moze jeszcze dodam jedna opcje, a ktos moze dopisze cos do tego, czy cos i skorzysta. Oczywiscie w celach edukacyjnych.