server.exe
#include <iostream>
#include <winsock.h>
#include <winsock2.h>
using namespace std;
int server(){
#define BUF_LEN 512
SOCKET listen1 , client;
WSAData wsadat;
int result;
char *recvbuf = new char[BUF_LEN];
int recvbuflen = BUF_LEN;
int error;
int sendresult;
char local[100] = "127.0.0.1";
result = WSAStartup(MAKEWORD(2,2), &wsadat);// initiate winsock with winsock version 2.2
if(result != 0){
printf("WSAStartup() failed: %d\n", result);
goto clean; // if result == 0 b.c WSAStartup if success is 1
}
SOCKADDR_IN server; //struct for Host info
server.sin_family = AF_INET; //AF_INET is internet something
server.sin_port = htons(2007); //port but htons converts to byte order on 2007
server.sin_addr.s_addr = inet_addr(local); // inet addr converts to
//net work byte order from local variable which is 127.0.0.1
listen1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //listen1
// is a socket but w.e so listen 1 is socket infor like internet
//family then SOCK_STREAM, which is for beginners
// and ipproto_TCP is so you use tcp instead of UDP
if(listen1 == INVALID_SOCKET){
error = WSAGetLastError();
cout<<"socket() returned error: "<<error<<endl;
goto clean;
//is for error checking WSAGetLastError() returns error code
//goto MSDN search WSAGetLastError(); and it will show error code list
}
result = bind(listen1,(SOCKADDR*)&server, sizeof(server));
//binds socket to local address, kinda confusing
// just MSDN this b.c it's hard for me to explain but ill try
//bind(SOCKET, (SOCKADDR*)&SOCKADDR_IN VAR, sizeof(SOCKADDR_IN VAR);
//or in mine
//bind(listen1, (SOCKADDR*)&server, sizeof(server));
if(result == SOCKET_ERROR){
error = WSAGetLastError();
cout<<"bind() returned error: "<<error<<endl;
goto clean;
//again error checking
}
result = listen(listen1, SOMAXCONN);
//listens for connections.
// listen(listen1 is socket, SOMAXCONN is a param that determines
//how many connections can be accepted i think from your internet speed
if(result == SOCKET_ERROR){
error = WSAGetLastError();
cout<<"listen() returned error: "<<error<<endl;
goto clean;
}
client = accept(listen1, NULL,NULL);
//client is another socket but accept will actually
//accept a connection after it's been listened now MSDN accept();
//b.c idk what the NULL,NULL does it's really confusing
if(client == SOCKET_ERROR){
error = WSAGetLastError();
cout<<"accept() returned error: "<<error<<endl;
goto clean;
}
closesocket(listen1);
//closes the socket no longer needed.
send:
cout<<"what would you like to send: "<<endl;
cin>>recvbuf;
result = send(client,recvbuf, strlen(recvbuf), MSG_OOB);
if(result == SOCKET_ERROR){
cout<<"send returned error: "<<error<<endl;
goto clean;
}else{cout<<"send successful"<<endl;
delete[] recvbuf;
new char[100];
}
result = recv(client,recvbuf,(recvbuflen), MSG_PEEK);
if(result == SOCKET_ERROR){
cout<<"recv() returned error: "<<error<<endl;
goto clean;
}else{cout<<recvbuf<<endl;
delete[] recvbuf;
new char[100];
}
goto send;
clean:
WSACleanup();//WSACleanup() cleans up winsock shit.. idk put
// at end always no params
closesocket(listen1);
system("PAUSE");
}
int main(){
server();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
trey.exe
#include <winsock.h>
#include <winsock2.h>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int main(){
#define DEFAULT_BUFLEN 512
WSAData wsadat;
SOCKET sock;
int result;
char leave[100] = "connection closing...";
char ip[100];
int port;
char *sendbuf = new char[100];
char *recvbuf = new char[100];
int recvbuflen= DEFAULT_BUFLEN;
int error = WSAGetLastError();
cout<<"~~~~~YourCPPHero Chat client~~~~~"<<endl;
result = WSAStartup(MAKEWORD(2,2), &wsadat);//same as server
if(result == SOCKET_ERROR){
cout<<"WSAStartup() returned error: "<<error<<endl;
system("PAUSE");
goto clean;
}
sock = socket(AF_INET, SOCK_STREAM, 0);// everything the same
//besides the 0 at the end b.c idc what one either tcp or UDP
if(sock == INVALID_SOCKET){
cout<<"socket() returned error: "<<error<<endl;
system("PAUSE");
goto clean;
}
SOCKADDR_IN server;
server.sin_family = AF_INET;
server.sin_port = htons(2007);//same but instead of local on
//inet_addr(local); it's inet_addr("127.0.0.1"); means same thing
//just lazyness to make the var :-p
server.sin_addr.s_addr = inet_addr("127.0.0.1");
//kris's ip 80.213.245.191
result = connect(sock, (SOCKADDR*)&server, sizeof(server));
// now this is different.
//connect() connects to a server.
//connect(SOCKET, (SOCKADDR*) &SOCKADDR_IN VAR, sizeof(var);
//refer to above
if(result == SOCKET_ERROR){
printf("connect() failed: %d\n", WSAGetLastError());
system("PAUSE");
goto clean;
}
send:
cout<<"what would you like to send: "<<endl;
cin>> sendbuf;
result = send(sock,sendbuf,DEFAULT_BUFLEN, MSG_OOB);
if(result == SOCKET_ERROR){
error = WSAGetLastError();
cout<<"send() returned error: "<<error<<endl;
goto clean;
}else{cout<<"send successful"<<endl;
delete sendbuf;}
result = recv(sock,recvbuf,DEFAULT_BUFLEN
, MSG_PEEK);
if(result == SOCKET_ERROR){
error = WSAGetLastError();
cout<<"recv() returned error: "<<error<<endl;
}else{cout<<recvbuf<<endl;
delete recvbuf;}
goto send;
clean:
system("PAUSE");
WSACleanup();
closesocket(sock);
}