1. Establishing a TCP connection between a client and server:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s; struct sockaddr_in server; char *message, server_reply[2000]; int recv_size;

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons( 8888 );

if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0){
    cout<<"connect error"<<endl;
    return 1;
}

cout<<"Connected"<<endl;

message = "Hello Server!";
if( send(s , message , strlen(message) , 0) < 0){
    cout<<"Send failed"<<endl;
    return 1;
}

cout<<"Data Sent"<<endl;

if((recv_size = recv(s , server_reply , 2000 , 0)) == SOCKET_ERROR){
    cout<<"recv failed"<<endl;
}

cout<<"Reply received"<<endl;

server_reply[recv_size] = '\0';
cout<<server_reply<<endl;

closesocket(s);
WSACleanup();

return 0;

}

  1. Creating a server socket and listening for incoming connections:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s, new_socket; struct sockaddr_in server, client; char *message, client_reply[2000]; int c, recv_size;

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR){
    cout<<"Bind failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Bind done"<<endl;

listen(s , 3);

cout<<"Waiting for incoming connections..."<<endl;

c = sizeof(struct sockaddr_in);
new_socket = accept(s , (struct sockaddr *)&client, &c);
if (new_socket == INVALID_SOCKET){
    cout<<"accept failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Connection accepted"<<endl;

if((recv_size = recv(new_socket , client_reply , 2000 , 0)) == SOCKET_ERROR){
    cout<<"recv failed"<<endl;
}

cout<<"Reply received"<<endl;

client_reply[recv_size] = '\0';
cout<<client_reply<<endl;

message = "Hello Client!";
send(new_socket , message , strlen(message) , 0);

cout<<"Data Sent"<<endl;

closesocket(s);
WSACleanup();

return 0;

}

  1. Creating a UDP socket and sending data to a server:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s; struct sockaddr_in server, si_other; char *message = "Hello Server!"; char server_reply[2000]; int recv_size, slen = sizeof(si_other);

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_DGRAM , IPPROTO_UDP)) == SOCKET_ERROR){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR){
    cout<<"Bind failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Bind done"<<endl;

si_other.sin_family = AF_INET;
si_other.sin_port = htons(8888);
si_other.sin_addr.s_addr = inet_addr("127.0.0.1");

if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR){
    cout<<"sendto() failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Data Sent"<<endl;

closesocket(s);
WSACleanup();

return 0;

}

  1. Receiving data on a server from a UDP client:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s; struct sockaddr_in server, si_other; char *message = "Hello Client!"; char client_reply[2000]; int recv_size, slen = sizeof(si_other);

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_DGRAM , IPPROTO_UDP)) == SOCKET_ERROR){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR){
    cout<<"Bind failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Bind done"<<endl;

while(1){
    cout<<"Waiting for data..."<<endl;
    fflush(stdout);

    if ((recv_size = recvfrom(s, client_reply, 2000, 0, (struct sockaddr *) &si_other, &slen)) == SOCKET_ERROR){
        cout<<"recvfrom() failed with error code : "<<WSAGetLastError()<<endl;
    }

    cout<<"Data received from "<<inet_ntoa(si_other.sin_addr)<<":"<<ntohs(si_other.sin_port)<<endl;

    client_reply[recv_size] = '\0';
    cout<<client_reply<<endl;

    if (sendto(s, message, strlen(message) , 0 , (struct sockaddr*) &si_other, slen) == SOCKET_ERROR){
        cout<<"sendto() failed with error code : "<<WSAGetLastError()<<endl;
        return 1;
    }

    cout<<"Data Sent"<<endl;
}

closesocket(s);
WSACleanup();

return 0;

}

  1. Creating a non-blocking socket:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s; struct sockaddr_in server; char *message, server_reply[2000]; int recv_size; u_long iMode = 1;

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons( 8888 );

if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0){
    cout<<"connect error"<<endl;
    return 1;
}

cout<<"Connected"<<endl;

message = "Hello Server!";
if( send(s , message , strlen(message) , 0) < 0){
    cout<<"Send failed"<<endl;
    return 1;
}

cout<<"Data Sent"<<endl;

// Set the socket to non-blocking mode
iMode = 1;
ioctlsocket(s, FIONBIO, &iMode);

while (1){
    recv_size = recv(s, server_reply, 2000, 0);
    if (recv_size > 0){
        server_reply[recv_size] = '\0';
        cout<<server_reply<<endl;
        break;
    }
}

closesocket(s);
WSACleanup();

return 0;

}

  1. Creating a thread to handle incoming connections on a server:

#include #include<winsock2.h> #include<process.h> using namespace std;

void handler(void *);

int main(){ WSADATA wsa; SOCKET s, new_socket; struct sockaddr_in server, client; char *message, client_reply[2000]; int c, recv_size;

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR){
    cout<<"Bind failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Bind done"<<endl;

listen(s , 3);

cout<<"Waiting for incoming connections..."<<endl;

c = sizeof(struct sockaddr_in);

while ((new_socket = accept(s , (struct sockaddr *)&client, &c))){
    cout<<"Connection accepted"<<endl;

    // create a new thread to handle the incoming connection
    _beginthread(handler, 0, (void *) &new_socket);
}

if (new_socket == INVALID_SOCKET){
    cout<<"accept failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

closesocket(s);
WSACleanup();

return 0;

}

void handler(void *socket_desc){ SOCKET sock = (SOCKET)socket_desc; char *message, client_reply[2000]; int recv_size;

message = "Hello Client!";
send(sock , message , strlen(message) , 0);

cout<<"Data Sent"<<endl;

if((recv_size = recv(sock , client_reply , 2000 , 0)) == SOCKET_ERROR){
    cout<<"recv failed"<<endl;
}

cout<<"Reply received"<<endl;

client_reply[recv_size] = '\0';
cout<<client_reply<<endl;

closesocket(sock);
_endthread();

}

  1. Sending data to multiple clients on a server:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s, new_socket; struct sockaddr_in server, client; char *message = "Hello Client!"; int c;

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR){
    cout<<"Bind failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Bind done"<<endl;

listen(s , 3);

cout<<"Waiting for incoming connections..."<<endl;

c = sizeof(struct sockaddr_in);

while ((new_socket = accept(s , (struct sockaddr *)&client, &c))){
    cout<<"Connection accepted"<<endl;

    // send data to the client
    send(new_socket , message , strlen(message) , 0);
}

if (new_socket == INVALID_SOCKET){
    cout<<"accept failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

closesocket(s);
WSACleanup();

return 0;

}

  1. Creating a UDP multicast socket:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s; struct sockaddr_in server, multicast; char *message = "Hello Multicast!"; char server_reply[2000]; int recv_size, slen = sizeof(multicast);

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_DGRAM , IPPROTO_UDP)) == SOCKET_ERROR){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR){
    cout<<"Bind failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Bind done"<<endl;

multicast.sin_family = AF_INET;
multicast.sin_addr.s_addr = inet_addr("239.255.255.250");
multicast.sin_port = htons( 1900 );

if (setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&s, sizeof(s)) < 0){
    cout<<"setsockopt() failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &multicast, slen) == SOCKET_ERROR){
    cout<<"sendto() failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Data Sent"<<endl;

closesocket(s);
WSACleanup();

return 0;

}

  1. Receiving data on a UDP multicast socket:

#include #include<winsock2.h> using namespace std;

int main(){ WSADATA wsa; SOCKET s; struct sockaddr_in server, multicast; char *message = "Hello Multicast!"; char server_reply[2000]; int recv_size, slen = sizeof(multicast);

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
    cout<<"Failed. Error Code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Initialised."<<endl;

if((s = socket(AF_INET , SOCK_DGRAM , IPPROTO_UDP)) == SOCKET_ERROR){
    cout<<"Could not create socket : "<<WSAGetLastError()<<endl;
}

cout<<"Socket created."<<endl;

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR){
    cout<<"Bind failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

cout<<"Bind done"<<endl;

multicast.sin_family = AF_INET;
multicast.sin_addr.s_addr = inet_addr("239.255.255.250");
multicast.sin_port = htons( 1900 );

if (setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&multicast, sizeof(multicast)) < 0){
    cout<<"setsockopt() failed with error code : "<<WSAGetLastError()<<endl;
    return 1;
}

while (1){
    cout<<"Waiting for data..."<<endl;
    fflush(stdout);

    if ((recv_size = recvfrom(s, server_reply, 2000, 0, (struct sockaddr *) &multicast, &slen)) == SOCKET_ERROR){
        cout<<"recvfrom() failed with error code : "<<WSAGetLastError()<<endl;
    }

    cout<<"Data received from "<<inet_ntoa(multicast.sin_addr)<<":"<<ntohs(multicast.sin_port)<<endl;

    server_reply[recv_size] = '\0';
    cout<<server_reply<<endl;
}

closesocket(s);
WSACleanup();

return 0;

}

  1. Sending and receiving data on a TCP connection using asynchronous I/O:

#include #include<winsock2.h> using namespace std;

#define MAX_BUFFER_SIZE 1024

int main(){ WSADATA wsa; SOCKET s; struct sockaddr_in server; WSAEVENT hEvent; WSABUF wsaBuf; char buffer[MAX_BUFFER_SIZE], server_reply[MAX_BUFFER_SIZE]; DWORD dwBytes, dwFlags = 0; int recv_size;

cout<<"Initialising Winsock..."<<endl;
if (WSAStartup(MAKEWORD(2,2),&wsa) !=
Write 10 Sample c++ coding for windows network programming

原文地址: http://www.cveoy.top/t/topic/rDG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录