Vous êtes sur la page 1sur 15

o Tng KTMT K53

// // training.cpp : Defines the entry point for the console application. o Tng - KTMT K53 "stdafx.h" <WinSock2.h> <conio.h> <stdio.h> <stdlib.h> <ws2tcpip.h>

#include #include #include #include #include #include

void thaoTacCoBanVoiTep() { char path[] = "E:\myfile.dat"; // path to file /********************************************************************** **/ /* fwrite: Write block of data to stream */ /* size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ) */ /* ptr Pointer to the array of elements to be written. size Size in bytes of each element to be written. count Number of elements, each one with a size of size bytes. stream Pointer to a FILE object that specifies an output stream */ /********************************************************************** **/ FILE * pFile; char buffer1[] = { 'x' , 'y' , 'z' }; pFile = fopen ( path , "wb" ); fwrite (buffer1 , 1 , sizeof(buffer1) , pFile ); // fwrite (buffer1 , 1 , sizeof(buffer1) , pFile ); ghi noi tiep file fclose (pFile); /********************************************************************** **/ /* fread: Read block of data from stream */ /* size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ) */ /* ptr Pointer to a block of memory with a minimum size of (size*count) bytes. size Size in bytes of each element to be read. count Number of elements, each one with a size of size bytes. stream Pointer to a FILE object that specifies an input stream. */

o Tng KTMT K53


/********************************************************************** **/ long lSize; char * buffer2; size_t result; pFile = fopen ( path , "rb" ); if (pFile==NULL) {fputs ("File error",stderr); exit (1);} // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile); // Set position indicator to the beginning // allocate memory to contain the whole file: buffer2 = (char*) malloc (sizeof(char)*lSize); if (buffer2 == NULL) {fputs ("Memory error",stderr); exit (2);} // copy the file into the buffer: result = fread (buffer2,1,lSize,pFile); if (result != lSize) {fputs ("Reading error",stderr); exit (3);} /* the whole file is now loaded in the memory buffer. */ for (int i = 0; i < result; i++) { printf("%c", buffer2[i]); } printf("\n"); // terminate fclose (pFile); free (buffer2);

/********************************************************************** **/ /* using feof */ /********************************************************************** **/ long n = 0; pFile = fopen (path,"rb"); if (pFile==NULL) perror ("Error opening file"); else { while (!feof(pFile)) { fgetc (pFile); n++; } fclose (pFile); printf ("Total number of bytes: %d\n", --n); } /********************************************************************** **/

o Tng KTMT K53


/* using fgetc */ /********************************************************************** **/ int c; n = 0; pFile=fopen (path, "r"); if (pFile==NULL) perror ("Error opening file"); else { do { c = fgetc (pFile); if (c == '$') n++; } while (c != EOF); fclose (pFile); printf ("The file contains %d dollar sign characters ($).\n",n); } /********************************************************************** **/ /* using fputc */ /********************************************************************** **/ pFile = fopen (path, "w"); if (pFile!=NULL) { for (c = 'A' ; c <= 'Z' ; c++) { fputc ( (int) c , pFile ); } fclose (pFile); } } void simpleTCPServer() { // declaration server int ret = 0; SOCKET server; SOCKADDR_IN serverAddr; int serverAddrLen = sizeof(serverAddr); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); SOCKET client; SOCKADDR_IN clientAddr; int clientAddrLen = sizeof(clientAddr); WSADATA wsaData; WORD wVersion = MAKEWORD(2,2); ret = WSAStartup(wVersion,&wsaData); if (ret == SOCKET_ERROR){ printf("Error %d", WSAGetLastError()); goto END; };

o Tng KTMT K53


// socket - create socket server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // bind - give the address of the socket on the server ret = bind(server, (sockaddr*)&serverAddr, sizeof(serverAddr)); if (ret == SOCKET_ERROR){ printf("Error %d", WSAGetLastError()); goto END; }; // listen - species the maximum number of connection requests that can be pending for this process // qua trinh xu ly tuan tu cac yeu cau ket noi tu client, chi khi 1 client ngat ket noi thi // client ke tiep moi vao vong xu ly ret = listen(server, 8); if (ret == SOCKET_ERROR) { printf("Error %d \n", WSAGetLastError()); goto END; } // accept - establish the connection with a specic client printf("Dang doi ket noi...\n"); client = accept(server, (sockaddr*)&clientAddr, &clientAddrLen); printf("Co ket noi tu: %s : %d\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port)); // send,recv: stream-based equivalents of read and write (repeated) char buf[1024]; int len = 0; while (1) { // nhan du lieu tu client len = recv(client, buf, 1024, 0); // doc noi dung client gui toi vao buf if (len <= 0) // co loi { printf("Error %d", WSAGetLastError()); break; } buf[len] = 0; // dong xau nhan duoc // hien thi noi dung nhan duoc tu client printf("Client: %s", buf); if (strncmp(buf, "bye", 3) == 0) { // 3 la so luong ki tu can so sanh send(client, "bye", 3, 0); // gui toi client xau chao /* co the cho nhap tu ban phim noi dung tra loi cho server gets(buf); send(client, buf, strlen(buf), 0); */ break; } } END: closesocket(server);

o Tng KTMT K53


WSACleanup(); } void simpleTCPClient() { // declaration client WSADATA wsaData; WORD wVersion = MAKEWORD(2,2); int ret = 0; ret = WSAStartup(wVersion, &wsaData); if (ret == SOCKET_ERROR) { printf("Error :%d", WSAGetLastError()); goto END; } SOCKET client; SOCKADDR_IN serverAddr; // server mac dinh) serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); /* Phan giai ten mien, day la lua chon cho nguoi dung char host[256]; // chua ten mien gets(host); addrinfo* result; ret = getaddrinfo(host, "http", 0, &result); // co the thay http bang xau chua so hieu cong if (ret != 0) { goto END; } memcpy(&serverAddr, result->ai_addr, result->ai_addrlen); printf("Ket noi den %s tai dia chi %s\n", host, inet_ntoa(serverAddress.sin_addr)); freeaddrinfo(result); */ // socket - create the socket client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); printf("Dang ket noi den %s tai %s...", "127.0.0.1", inet_ntoa(serverAddr.sin_addr)); // connect - connect to a server ret = connect(client, (sockaddr*)&serverAddr, sizeof(serverAddr)); if (ret == SOCKET_ERROR) { printf("Error :%d", WSAGetLastError()); goto END; } printf("Da ket noi den server\n"); // send,recv:(repeated) char buf[1024]; int len = 0; while (1) { gets(buf); strcat(buf,"\n"); len = send(client, buf, strlen(buf), 0); if (len <= 0) // co loi { printf("Error %d", WSAGetLastError());

o Tng KTMT K53


break; } if (strncmp(buf, "bye", 3) == 0) { // 3 la so luong ki tu can so sanh break; } } END: closesocket(client); WSACleanup(); } void simpleUDPTalker() { // declaration talker WSADATA wsaData; WORD wVersion = MAKEWORD(2,2); int ret; ret = WSAStartup(wVersion,&wsaData); if (ret == SOCKET_ERROR) { printf("Error :%d", WSAGetLastError()); goto END; } SOCKET talker; SOCKADDR_IN listenerAddr, talkerAddr; listenerAddr.sin_family = AF_INET; listenerAddr.sin_port = htons(8888); // listenerAddr.sin_addr.s_addr = htonl(INADDR_ANY); // bat ky listener nao cung nhan duoc thong diep listenerAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // gui toi duy nhat 1 may // socket talker = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // sendto (repeated) char buf[1024]; int len; while (1) { gets(buf); strcat(buf, "\n"); len = sendto(talker, buf, strlen(buf), 0, (sockaddr*)&listenerAddr, sizeof(listenerAddr)); if (len == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); break; } if (strncmp(buf, "bye", 3) == 0) break; } END: closesocket(talker); WSACleanup(); } void simpleUDPListener() { // declaration listener

o Tng KTMT K53


WSADATA wsaData; WORD mVersion = MAKEWORD(2, 2); int ret = 0; ret = WSAStartup(mVersion, &wsaData); if (ret == SOCKET_ERROR) { printf("Error :%d", WSAGetLastError()); goto END; } SOCKET listener; SOCKADDR_IN listenerAddr, talkerAddr; listenerAddr.sin_family = AF_INET; listenerAddr.sin_addr.s_addr = htonl(INADDR_ANY); listenerAddr.sin_port = htons(8888); // socket listener = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // bind - khong can thiet 2 ben phai cung bind -> 1 ben nghe la du ret = bind(listener,(sockaddr*)&listenerAddr,sizeof(listenerAddr)); if (ret == SOCKET_ERROR) { printf("Error %d:", WSAGetLastError()); goto END; }; // recvfrom (repeated) char buf[1024]; int len = sizeof(talkerAddr); while (1) { ret = recvfrom(listener, buf, 1024, 0, (sockaddr*)&talkerAddr, &len); if (ret > 0) { if (strncmp(buf, "bye", 3) == 0) break; buf[ret] = 0; printf("[%s:%d]%s\n",inet_ntoa(talkerAddr.sin_addr), ntohs(talkerAddr.sin_port),buf); } } END: closesocket(listener); WSACleanup(); }

/************************************************************************/ /* Blocking server */ /************************************************************************/ // declaration global for blocking SOCKET clients[64]; SOCKADDR_IN clientAddrs[64]; int clientAddrLen = sizeof(sockaddr); int length = 0; #define MAX_CLIENTS 64

o Tng KTMT K53

// Khai bao luong nhan du lieu DWORD WINAPI serverReceiveThread(LPVOID lpParam) { int i = (int)lpParam; char buf[1024]; int len; while(1) { len = recv(clients[i], buf, 1024, 0); if (len <= 0) { clients[i] = -1; break; } buf[len] = 0; printf("[%s:%d] %s\n", inet_ntoa(clientAddrs[i].sin_addr), ntohs(clientAddrs[i].sin_port), buf); if (strncmp(buf, "bye", 3) == 0) break; }; printf("Client %d da ngat ket noi!\n", i); return 0; } // Khia bao luong gui du lieu DWORD WINAPI serverSendThread(LPVOID lpParam) { char buf[1024]; while(1) { gets(buf); // nhap xau chao cho server de gui toi clients[i] strcat(buf,"\n"); for (int i = 0; i < MAX_CLIENTS; i++) if (clients[i] != -1) send(clients[i], buf, strlen(buf), 0); } return 0; } void blockingTCPServer() { // declaration blocking WSADATA wsaData; int ret = WSAStartup(MAKEWORD(2,2),&wsaData); if (ret == SOCKET_ERROR) { printf("Error :%d", WSAGetLastError()); goto END; } SOCKET server; SOCKADDR_IN serverAddr; int i; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); for (i = 0; i < MAX_CLIENTS; i++) clients[i] = -1; // ngat toan bo ket noi tu 64 clients // socket

o Tng KTMT K53


server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); // bind ret = bind(server,(sockaddr*)&serverAddr,sizeof(serverAddr)); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // listen ret = listen(server,8); if (ret == SOCKET_ERROR) { printf("Error :%d", WSAGetLastError()); goto END; } // blocking while(1) { for (i = 0; i < MAX_CLIENTS; i++) if (clients[i] == -1) break; // tranh truong hop server chay khong tai if (i == 64) { printf("Vui long cho trong giay lat!"); Sleep(1000); // het slot continue; } // accept, send, recv // chuong trinh tong cong co 3 luong, 1 chinh va 2 phu clients[i] = accept(server, (sockaddr*)&clientAddrs[i], &clientAddrLen); length++; if (length == 1) CreateThread(0, 0, serverSendThread, 0, 0, 0); // tao luong gui printf("Co ket noi moi tu: %s:%d\n", inet_ntoa(clientAddrs[i].sin_addr), ntohs(clientAddrs[i].sin_port)); CreateThread(0, 0, serverReceiveThread, (LPVOID)i, 0, 0); } END: closesocket(server); WSACleanup(); }

/************************************************************************/ /* Blocking client */ /************************************************************************/ // declaration blocking client SOCKET client; SOCKADDR_IN serverAddr;

o Tng KTMT K53


DWORD WINAPI clientReceiveThread(LPVOID lpParam) { char buf[1024]; int len; while (1) { len = recv(client, buf, 1024, 0); if (len <= 0) break; buf[len] = 0; printf("Server:%s", buf); }; return 0; } void blockingTCPClient() { // declaration WSADATA wsaData; int ret = WSAStartup(MAKEWORD(2,2), &wsaData); if (ret == SOCKET_ERROR) { printf("Error :%d", WSAGetLastError()); goto END; } serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // socket client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); // connect ret = connect(client, (sockaddr*)&serverAddr, sizeof(serverAddr)); if(ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // mo luong nhan du lieu tu server CreateThread(0, 0, clientReceiveThread, (LPVOID)0, 0, 0); // doan gui du lieu len server char buf[1024]; int len; while (1) { gets(buf); strcat(buf,"\n"); len = send(client, buf, strlen(buf), 0); } END: closesocket(client); WSACleanup(); } // select model void select() {

o Tng KTMT K53


// declaration SOCKET server; SOCKET clients[64]; SOCKADDR_IN serverAddr; SOCKADDR_IN clientAddrs[64]; int i; for (i = 0; i < 64; i++) clients[i] = 0; int clientAddrLen = sizeof(SOCKADDR_IN); WSADATA wsaData; WORD wVersion = MAKEWORD(2,2); int ret = WSAStartup(wVersion,&wsaData); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); // socket server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // bind ret = bind(server, (sockaddr*)&serverAddr, sizeof(serverAddr)); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // listen ret = listen(server, 8); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // select fd_set readfds; char buf[1024]; int len; SOCKET tmp; SOCKADDR_IN tmpAddr; timeval wait; wait.tv_sec = 2; wait.tv_usec = 0; while (1) { FD_ZERO(&readfds);

o Tng KTMT K53


FD_SET(server,&readfds); for (i = 0; i < 63; i++) if (clients[i]>0) FD_SET(clients[i],&readfds); ret = select(0,&readfds,0,0,&wait); if (ret == SOCKET_ERROR) { printf("Error: %d",WSAGetLastError()); break; }; if (ret == 0) { printf("Het gio ma khong co su kien gi...\n"); continue; } if (FD_ISSET(server,&readfds)) { for (i = 0; i < 63; i++) if (clients[i]==0) break; // co socket ranh if (i == 63) { tmp = accept(server, (sockaddr*)&tmpAddr, &clientAddrLen); shutdown(tmp, SD_BOTH); closesocket(tmp); continue; } clients[i]=accept(server, (sockaddr*)&clientAddrs[i], &clientAddrLen); printf("Co ket noi moi tu %s:%d!\n", inet_ntoa(clientAddrs[i].sin_addr), ntohs(clientAddrs[i].sin_port)); }; for (i = 0; i < 63; i++) if (clients[i] > 0) if (FD_ISSET(clients[i], &readfds)) { len = recv(clients[i], buf, 1024, 0); if (len <= 0) { printf("Client %d da ngat ket noi!\n", i); closesocket(clients[i]); clients[i] = 0; continue; }; buf[len] = 0; printf("Client %d:%s", i, buf); } } END: closesocket(server); WSACleanup(); }

o Tng KTMT K53


/************************************************************************/ /* */ /************************************************************************/ void selectTCPServer255() { // declaration SOCKET server; SOCKET clients[64]; SOCKADDR_IN serverAddr; SOCKADDR_IN clientAddrs[64]; int i; for (i = 0; i < 64; i++) clients[i] = 0; int clientAddrLen = sizeof(SOCKADDR_IN); WSADATA wsaData; WORD wVersion = MAKEWORD(2,2); int ret = WSAStartup(wVersion,&wsaData); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); // socket server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // bind ret = bind(server, (sockaddr*)&serverAddr, sizeof(serverAddr)); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // listen ret = listen(server, 8); if (ret == SOCKET_ERROR) { printf("Error %d", WSAGetLastError()); goto END; } // select fd_set readfds; char buf[1024]; int len; SOCKET tmp; SOCKADDR_IN tmpAddr; timeval wait; wait.tv_sec = 2;

o Tng KTMT K53


wait.tv_usec = 0; while (1) { FD_ZERO(&readfds); FD_SET(server,&readfds); for (i = 0; i < 63; i++) if (clients[i]>0) FD_SET(clients[i],&readfds); ret = select(0,&readfds,0,0,&wait); if (ret == SOCKET_ERROR) { printf("Error: %d",WSAGetLastError()); break; }; if (ret == 0) { printf("Het gio ma khong co su kien gi...\n"); continue; } if (FD_ISSET(server,&readfds)) { for (i = 0; i < 63; i++) if (clients[i]==0) break; // co socket ranh if (i == 63) { tmp = accept(server, (sockaddr*)&tmpAddr, &clientAddrLen); shutdown(tmp, SD_BOTH); closesocket(tmp); continue; } clients[i]=accept(server, (sockaddr*)&clientAddrs[i], &clientAddrLen); printf("Co ket noi moi tu %s:%d!\n", inet_ntoa(clientAddrs[i].sin_addr), ntohs(clientAddrs[i].sin_port)); }; for (i = 0; i < 63; i++) if (clients[i] > 0) if (FD_ISSET(clients[i], &readfds)) { len = recv(clients[i], buf, 1024, 0); if (len <= 0) { printf("Client %d da ngat ket noi!\n", i); closesocket(clients[i]); clients[i] = 0; continue; }; buf[len] = 0; printf("Client %d:%s", i, buf); } } END: closesocket(server); WSACleanup();

o Tng KTMT K53


} int _tmain(int argc, _TCHAR* argv[]) { // thaoTacCoBanVoiTep(); // simpleTCPServer(); // simpleTCPClient(); // simpleUDPTalker(); // simpleUDPListener(); // blockingTCPServer(); // blockingTCPClient(); // select(); // bai tap tren lop selectTCPServer255(); getch(); return 0; }

Vous aimerez peut-être aussi