C/C++ ile soket programlama

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üye
Katılım
7 Ara 2020
Mesajlar
4
Tepki puanı
1
Yaş
26
5 HİZMET YILI
İyi günler bir süredir TCP/IP protokolü ile iki windows işletim sistemine sahip bilgisayar arasında veri iletişimi yapmak için uğraşıyorum.
Kendi bilgisayarım üzerinde TCP server ve Client çalıştırdığımda herhangi bir sorun olmazken iki ayrı ve aynı ağa bağlı bilgisayarlar üzerinde birisi Server diğeri Client olmak üzere deneme yaparken sonuç alamıyorum

C++:
//TCP SERVER
#include<WinSock2.h>
#include<iostream>
using namespace std;
int main()
{
 cout<<"\t\t------ TCP SERVER ---------"<<endl;
//Local Variable
 WSADATA   Winsockdata ;
 int       iWsaStartup ;
 int       iWsaCleanup;

 SOCKET   TCPServerSocket;
 int      iCloseSocket;

 struct  sockaddr_in  TCPServerAdd;
 struct  sockaddr_in  TCPClientAdd;
 int     iTCPClientAdd    = sizeof(TCPClientAdd);

 int iBind ;

 int iListen;

 SOCKET sAcceptSocket;

 int   iSend;
 char  SenderBuffer[512] = "Hello from Server!";
 int   iSenderBuffer = strlen( SenderBuffer )+1;

 int  iRecv;
 char RecvBuffer[512];
 int  iRecvBuffer = 512;

// STEP -1 WSAStartUp Fun
iWsaStartup = WSAStartup(MAKEWORD(2,2),&Winsockdata);
if ( iWsaStartup!= 0 )
{
cout<<"WSAStartUp Failed"<<endl;
}
cout<<"WSAStartUp Success"<<endl;

// STEP-2 Fill the Structure
TCPServerAdd.sin_family = AF_INET;
TCPServerAdd.sin_addr.s_addr =inet_addr("127.0.0.1");//htonl(INADDR_ANY);
TCPServerAdd.sin_port = htons(8080);

//STEP -3 Socket Creation
TCPServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (TCPServerSocket == INVALID_SOCKET)
{
cout<<"TCP Server Socket Creation Failed"<<endl;
cout<<"Error Code - "<<WSAGetLastError()<<endl;
}
cout<<"TCP Server Socket Creation Success"<<endl;

//STEP-4 bind fun
 iBind = bind(
        TCPServerSocket,
        (SOCKADDR*)&TCPServerAdd,
        sizeof(TCPServerAdd));
if (iBind == SOCKET_ERROR)
{
cout<<"Binding Failed"<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Binding Success"<<endl;

//STEP-5 Listen fun
iListen = listen(TCPServerSocket,2);
if (iListen == SOCKET_ERROR)
{
cout<<"Listen Fun Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Listen Fun Success"<<endl;

// STEP-6 Accept
sAcceptSocket = accept(
               TCPServerSocket,
               (SOCKADDR*)&TCPClientAdd,
               &iTCPClientAdd);
if (sAcceptSocket == INVALID_SOCKET)
{
cout<<"Accept Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Connection Accepted"<<endl;

// STEP-7 Send Data to Client
iSend =send(sAcceptSocket,SenderBuffer,iSenderBuffer,0);
if (iSend == SOCKET_ERROR)
{
cout<<"Sending Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Data Sending Success "<<endl;

// STEP-8 Recv Data from Client
iRecv = recv(sAcceptSocket,RecvBuffer,iRecvBuffer,0);
if (iRecv == SOCKET_ERROR)
{
cout<<"Receive Data Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"DATA RECEIVED -> "<<RecvBuffer<<endl;
memset(&RecvBuffer[0], 0, sizeof(RecvBuffer));
// STEP-9 Close Socket
iCloseSocket = closesocket(TCPServerSocket);
if (iCloseSocket == SOCKET_ERROR)
{
cout<<"Closing Socket Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Closing Socket Success"<<endl;
// STEP-10 CleanUp from DLL
iWsaCleanup = WSACleanup();
if (iWsaCleanup == SOCKET_ERROR)
{
cout<<"CleanUp Fun Failed "<<WSAGetLastError()<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"CleanUp Fun Success"<<endl;

system("PAUSE");
return 0;
}

C++:
//TCP CLIENT
#include<WinSock2.h>
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
cout<<"\t\t------ TCP CLIENT --------"<<endl;
//Local Variable
WSADATA       WinSockData;
int           iWsaStartup ;
int           iWsaCleanup ;

SOCKET        TCPClientSocket;
int           iCloseSocket;

struct   sockaddr_in     TCPServerAdd;

int           iConnect;

int           iRecv;
char          RecvBuffer[512];
int           iRecvBuffer = 512;

int        iSend;
char       SenderBuffer[512] = "Hello from Client";
int        iSenderBuffer = strlen( SenderBuffer )+1;

//STEP-1 WSASatrtUp Fun
iWsaStartup = WSAStartup(MAKEWORD(2,2),&WinSockData);
if ( iWsaStartup!= 0 )
{
cout<<"WSAStartUp Failed"<<endl;
}
cout<<"WSAStartUp Success"<<endl;
// STEP-2 Socket Creation
TCPClientSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (TCPClientSocket == INVALID_SOCKET)
{
cout<<"TCP Client Socket Creation Failed"<<endl;
cout<<"Error Code - "<<WSAGetLastError()<<endl;
}
cout<<"TCP Client Socket Creation Success"<<endl;

// STEP-3 Fill Server Structure
TCPServerAdd.sin_family = AF_INET;
TCPServerAdd.sin_addr.s_addr =inet_addr("127.0.0.1"); //htonl(INADDR_ANY);
TCPServerAdd.sin_port = htons(8080);

// STEP-4 Connect Fun
iConnect = connect(
                   TCPClientSocket,
                  (SOCKADDR*)&TCPServerAdd,
                  sizeof(TCPServerAdd));
if (iConnect == SOCKET_ERROR)
{
   cout<<"Connection Failed "<<endl;
   cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Connection Success"<<endl;

// STEP-5 RECV Data From Server Side
iRecv = recv(TCPClientSocket,RecvBuffer,iRecvBuffer,0);
if (iRecv == SOCKET_ERROR)
{
 cout<<"Receive Data Failed "<<endl;
 cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"DATA RECEIVED -> "<<RecvBuffer<<endl;
memset(&RecvBuffer[0], 0, sizeof(RecvBuffer));
// STEP-6 Send Data to Server
iSend = send(TCPClientSocket,SenderBuffer,iSenderBuffer,0);
if (iSend == SOCKET_ERROR)
{
cout<<"Sending Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Data Sending Success "<<endl;

// STEP-7 Close Socket Fun
iCloseSocket = closesocket(TCPClientSocket);
if (iCloseSocket == SOCKET_ERROR)
{
cout<<"Closing Socket Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"Closing Socket Success"<<endl;

// STEP-8 WSA CleanUp Fun;
iWsaCleanup = WSACleanup();
if (iWsaCleanup == SOCKET_ERROR)
{
cout<<"CleanUp Fun Failed "<<endl;
cout<<"Error No-> "<<WSAGetLastError()<<endl;
}
cout<<"CleanUp Fun Success"<<endl;

system("PAUSE");
return 0;
}

Buradaki eksiğim ne?
Bunun dışında C/C++ ile soket programlama ve ağ ile ilgili önerebileceğiniz kurs var mı?
 
Banlı Üye
Katılım
2 Ara 2020
Mesajlar
128
Çözümler
1
Tepki puanı
44
5 HİZMET YILI
Kurs yok ancak Guide hacking bu tarz videolar çekmişti galiba Winsock ile network ile ilgili bir bakabilirsin istiyorsan

ve anlamadım eskiden socketle kimse ilgilenmezdi şimdi herkes socket aşığı oldu :D
 
Banlı Üye
Katılım
18 Şub 2020
Mesajlar
520
Çözümler
4
Tepki puanı
71
Yaş
23
6 HİZMET YILI
Modem üzerinden port yönlendirme yapman lazım. Modem arayüzünde ilgili alana " Dış adresimdeki şu portuma istek gelince benim şu local ip me ilet" gibi birşey yapıyorsun.

Modem üzerinden port yönlendirme yapman lazım. Modem arayüzünde ilgili alana " Dış adresimdeki şu portuma istek gelince benim şu local ip me ilet" gibi birşey yapıyorsun.
Aynı bilgisayarda zaten local ağdasın portların hepsi local ip ne iletilicek. Dış ip den gelen isteği local ip ye yönlendirmelisin.
 
Onaylı Üye
Katılım
9 Eyl 2020
Mesajlar
50
Tepki puanı
19
Ödüller
4
5 HİZMET YILI
Modem üzerinden port yönlendirme yapman lazım. Modem arayüzünde ilgili alana " Dış adresimdeki şu portuma istek gelince benim şu local ip me ilet" gibi birşey yapıyorsun.

Aynı bilgisayarda zaten local ağdasın portların hepsi local ip ne iletilicek. Dış ip den gelen isteği local ip ye yönlendirmelisin.
Dostum bana yardımcı olabilir misin. Ben modem arayüzünden 4141 adında hem tcp hem udp portu açtım. Aynı durum bende de var localhostta iken server ve client birbirini görüyor ama farklı bir ağ bağlantısı kullanırsam görmüyor. Public IP adresimi denedim olmadı. Biraz araştırdım buna neden olan şey NAT'mış. Hole punching kavramlarına baktım pek bir sonuç elde edemedim yani daha doğrusu ne yaptığımı anlamadım. Hadi bunu hallettim diyelim benim ip adresim dinamik, statik bir ip adresi almam gerekecek. Bana lazım olan senin dediğin yani port yönlendirme üzerinden server ve client iletişimi yapmam gerek. Ama bunu nasıl yapacağım hakkında herhangi bir fikrim yok. Dc varsa tzl#9999 bana ulaşırsan sevinirim.
 
Üye
Katılım
7 Ara 2020
Mesajlar
4
Tepki puanı
1
Yaş
26
5 HİZMET YILI
Modem üzerinden port yönlendirme yapman lazım. Modem arayüzünde ilgili alana " Dış adresimdeki şu portuma istek gelince benim şu local ip me ilet" gibi birşey yapıyorsun.


Aynı bilgisayarda zaten local ağdasın portların hepsi local ip ne iletilicek. Dış ip den gelen isteği local ip ye yönlendirmelisin.
Üzerinden bir kaç gün geçti anca denemelerim için yeni modem aldım. Modem üzerinden port yönlendirme yaptım lakin olmadı
 
Üye
Katılım
7 Ara 2020
Mesajlar
4
Tepki puanı
1
Yaş
26
5 HİZMET YILI
ben çözdüm ipv4 adresin üzerine kur serverı nat izin vermez public ip üzerine yaparsan
Server i zaten ipv4 üzerine kurdum
TCPServerAdd.sin_family = AF_INET;
bir yanlışım mı var.
Örnek olarak sizin kullandığınız kodu bana gönderebilir misiniz?
 
Onaylı Üye
Katılım
9 Eyl 2020
Mesajlar
50
Tepki puanı
19
Ödüller
4
5 HİZMET YILI
TCPServerAdd.sin_family = AF_INET;
TCPServerAdd.sin_port = htons("port"); // örnek olarak 8080
inet_pton(AF_INET, "ipv4 adresi", &( TCPServerAdd.sin_addr.s_addr)); // örnek olarak 192.168.0.90

Server i zaten ipv4 üzerine kurdum
TCPServerAdd.sin_family = AF_INET;
bir yanlışım mı var.
Örnek olarak sizin kullandığınız kodu bana gönderebilir misiniz?

burdaki işlem NAT'a uğramayıp direkt olarak ipv4 adresine port üzerinden paket yollamaktır bu sayede verdiğimiz adres açık olan porttan paketleri alıp kendisi üzerinden servera iletecektir
çalışıp çalışmadığını yazdığınız clienttan "localhost" veya "127.0.0.1" adresine bağlanıp test edebilirsiniz. Eğer bağlanmazsa çalışıyor demektir. bağlanması için ipv4 adresinizi ve açtığınız portu kullanın.
 
Üye
Katılım
7 Ara 2020
Mesajlar
4
Tepki puanı
1
Yaş
26
5 HİZMET YILI
TCPServerAdd.sin_family = AF_INET;
TCPServerAdd.sin_port = htons("port"); // örnek olarak 8080
inet_pton(AF_INET, "ipv4 adresi", &( TCPServerAdd.sin_addr.s_addr)); // örnek olarak 192.168.0.90



burdaki işlem NAT'a uğramayıp direkt olarak ipv4 adresine port üzerinden paket yollamaktır bu sayede verdiğimiz adres açık olan porttan paketleri alıp kendisi üzerinden servera iletecektir
çalışıp çalışmadığını yazdığınız clienttan "localhost" veya "127.0.0.1" adresine bağlanıp test edebilirsiniz. Eğer bağlanmazsa çalışıyor demektir. bağlanması için ipv4 adresinizi ve açtığınız portu kullanın.

Çok teşekkür ederim sonunda bendede oldu size dc den istek göndereceğim kabul ederseniz sevinirim birbirimize bilgi aktarımı yaparız
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst