0% found this document useful (0 votes)
15 views9 pages

Thuc Hanh Socket

The document discusses how to create a client and server application using sockets in C++ on Windows. It covers initializing Winsock, creating sockets, connecting sockets, sending and receiving data between client and server.

Uploaded by

tung0208266
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views9 pages

Thuc Hanh Socket

The document discusses how to create a client and server application using sockets in C++ on Windows. It covers initializing Winsock, creating sockets, connecting sockets, sending and receiving data between client and server.

Uploaded by

tung0208266
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Thực hành Socket

1. Tạo chương trình client sử dụng Socket trong thư viện winsock
1.1 Khởi tạo chương trình :
- Khởi tạo project C++ dạng console trên Codeblocks
- Thêm tham số -lws2_32 vào phần Linker options
- Khai báo thư viện sử dụng trong chương trình:
#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[]){


return 0;
}

1.2 Khởi tạo Winsock:


#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])


{
WSADATA wsa;
cout<<"\nInitialising Winsock...";
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
cout<<"Failed. Error Code : "<<WSAGetLastError();
return 1;
}
cout<<"Initialised.\n";
return 0;
}

1.3 Khởi tạo socket:


#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library
int main(int argc , char *argv[])
{
WSADATA wsa;
SOCKET s;
cout<<"\nInitialising Winsock...";
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
cout<<"Failed. Error Code : "<<WSAGetLastError();
return 1;
}
cout<<"Initialised.\n";
if((s = socket(AF_INET , SOCK_STREAM , 0 )) ==
INVALID_SOCKET)
{
cout<<"Could not create socke:"<<WSAGetLastError();
}
cout<<"Socket created.\n";
return 0;
}

1.4 Kết nối tới server:


#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])


{
WSADATA wsa;
SOCKET s;

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

cout<<"Initialised.\n";

if((s = socket(AF_INET , SOCK_STREAM , 0 )) ==


INVALID_SOCKET)
{
cout<<"Could not create socket
:"<<WSAGetLastError();
}
cout<<"Socket created.\n";

struct sockaddr_in server;


server.sin_addr.s_addr = inet_addr("117.4.240.19");
server.sin_family = AF_INET;
server.sin_port = htons(80);

//Connect to remote server


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

cout<<"Connected";
return 0;
}

1.5 Gửi dữ liệu tới server và nhận dữ liệu phản hồi:


#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])


{
WSADATA wsa;
SOCKET s;
cout<<"\nInitialising Winsock...";
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
cout<<"Failed. Error Code : "<<WSAGetLastError();
return 1;
}
cout<<"Initialised.\n";
if((s = socket(AF_INET , SOCK_STREAM , 0 )) ==
INVALID_SOCKET)
{
cout<<"Could not create socket
:"<<WSAGetLastError();
}
cout<<"Socket created.\n";
struct sockaddr_in server;
server.sin_addr.s_addr = inet_addr("117.4.240.19");
server.sin_family = AF_INET;
server.sin_port = htons(80);
//Connect to remote server
if (connect(s , (struct sockaddr *)&server ,
sizeof(server)) < 0)
{
cout<<"connect error";
return 1;
}
cout<<"Connected";
//Send some data
char *message , server_reply[2000];
int recv_size;
message = "GET / HTTP/1.1\r\n\r\n";
if( send(s , message , strlen(message) , 0) < 0)
{
cout<<"Send failed";
return 1;
}
puts("Data Send\n");
//Receive a reply from the server
if((recv_size = recv(s , server_reply , 2000 , 0)) ==
SOCKET_ERROR)
{
cout<<"recv failed";
}
cout<<"Reply received\n";
server_reply[recv_size] = '\0';
cout<<server_reply;
return 0;
}
 Thử thay đổi địa chỉ IP để kết nối đến một server khác

2. Tạo chương trình server sử dụng winsock


2.1 Gắn một socket với địa chỉ và cổng:
#include<io.h>
#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])


{
WSADATA wsa;
SOCKET s , new_socket;
struct sockaddr_in server , client;
int c;

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

cout<<"Initialised.\n";

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

cout<<"Socket created.\n";

//Prepare the sockaddr_in structure


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

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

cout<<"Bind done \n";


closesocket(s);
WSACleanup();
return 0;
}

2.2 Lắng nghe và chấp nhận kết nối:


#include<io.h>
#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])


{
WSADATA wsa;
SOCKET s , new_socket;
struct sockaddr_in server , client;
int c;
cout<<"\nInitialising Winsock...";
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
cout<<"Failed. Error Code :
%d",WSAGetLastError();
return 1;
}
cout<<"Initialised.\n";
//Create a socket
if((s = socket(AF_INET , SOCK_STREAM , 0 )) ==
INVALID_SOCKET)
{
cout<<"Could not create socket : "<<
WSAGetLastError();
}
cout<<"Socket created.\n";
//Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );

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

cout<<"Bind done \n";

//Listen to incoming connections


listen(s , 3);

//Accept and incoming connection


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

c = sizeof(struct sockaddr_in);
while( (new_socket = accept(s , (struct sockaddr
*)&client, &c)) != INVALID_SOCKET )
{
cout<<"Connection accepted";
}

if (new_socket == INVALID_SOCKET)
{
printf("accept failed with error code : %d" ,
WSAGetLastError());
return 1;
}

closesocket(s);
WSACleanup();
return 0;
}

*Sử dụng telnet để kết nối tới chương trình server


2.3 Gửi dữ liệu cho client sau khi chấp nhận kết nối:
#include<io.h>
#include<winsock2.h>
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])


{
WSADATA wsa;
SOCKET s , new_socket;
struct sockaddr_in server , client;
int c;
cout<<"\nInitialising Winsock...";
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
cout<<"Failed. Error Code :
%d",WSAGetLastError();
return 1;
}
cout<<"Initialised.\n";
//Create a socket
if((s = socket(AF_INET , SOCK_STREAM , 0 )) ==
INVALID_SOCKET)
{
cout<<"Could not create socket : "<<
WSAGetLastError();
}
cout<<"Socket created.\n";
//Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );
//Bind
if( bind(s ,(struct sockaddr *)&server ,
sizeof(server)) == SOCKET_ERROR)
{
cout<<"Bind failed with error code : "<<
WSAGetLastError();
exit(EXIT_FAILURE);
}

cout<<"Bind done \n";


//Listen to incoming connections
listen(s , 3);
//Accept and incoming connection
cout<<"Waiting for incoming connections...";
c = sizeof(struct sockaddr_in);
char *message , client_reply[2000];
while( (new_socket = accept(s , (struct sockaddr
*)&client, &c)) != INVALID_SOCKET )
{
cout<<"Connection accepted";

//Reply to the client


message = "Hello, we are in a connection!";
send(new_socket , message , strlen(message) , 0);
}

if (new_socket == INVALID_SOCKET)
{
printf("accept failed with error code : %d" ,
WSAGetLastError());
return 1;
}
closesocket(s);
WSACleanup();
return 0;
}

*Sử dụng telnet để kết nối tới chương trình server

You might also like