Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 02:33   #1
Skullet
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 10
По умолчанию Доработать протокол отправки SMS-сообщений таким образом, чтобы удалять можно было только разрешенные для удаления сообщения. Разр

Доработать протокол отправки SMS-сообщений таким образом, чтобы удалять можно было только разрешенные для удаления сообщения. Разрешения присваивает отправитель дополнительным параметром в команде sms.
Сервер:
PHP код:
#include "afx.h"
#include <iostream>
#include <winsock2.h>
#include <process.h> /* _beginthread, _endthread */
#include <string.h>
#include <time.h> 
using namespace std;

CFile f;
CFileException ex;
clock_t startfinish;

// удалить сообщение с номером
void del(charp,int n) {
    
char tel[200];
    
int j=0;
     for (
int i=n;p[i]!=' ';i++) {
        
tel[j]=p[i];
        
j++;
    }
    
tel[j]='\0'

    
char fName[200];
    
CString strin;

    
fName[0]='\0';
    
strcat(fName,tel);
    
strcat(fName,".txt");
    
strin=fName;
    
CFile MyFile;
    
DeleteFile(strin);
    
cout<<"SMS is removed"<<endl;
    } 

//Отослать сообщение на SMS-центр для номера
void sms(charp,int n) {
    
char tel[200];
    
char str[200]; int j=0;
    
CFile MyFile;
    for (
int i=n;p[i]!=' ';i++) {
        
tel[j]=p[i];
        
j++;
    }
    
tel[j]='\0';
    
n=j+1;j=0;
    for(
int i=n/*-1*/;p[i];i++) {
        
str[j]=p[i];
        
j++;
    }
    
str[j]='\0';
    
char fName[200];
    
CString strin;

    
fName[0]='\0';
    
strcat(fName,tel);
    
strcat(fName,".txt");
    
strin=fName;

    
cout<<"sms processing..."

    if (!
MyFile.Open(strinCFile::modeWrite CFile::modeCreate, &ex)){
        
cerr<<"SMS storage error. Try again\n";
        exit(
EXIT_FAILURE);
    }
    
MyFile.Write(str,strlen(str));
    
cout<<"sent successfully"<<endl;
    
MyFile.Close();


void SMSworking(voidnewS) {
    
int c;
    
char p[200], com[200];
    
com[0]='\0';p[0]='\0';
    
strcat(p,"SMS center connected...\n");
    
send((SOCKET)newS,p,sizeof(p),0);
    while((
c=recv((SOCKET)newS,p,sizeof(p),0)!=0)) {
        
int i=0;
        while (
p[i]!=' ') {
            
com[i]=p[i];
            
i++;
        };
        
com[i]='\0';i++;
        if (!
strcmp(com,"sms")) {
            
start clock();
            
sms(p,i);
            
com[0]='\0';
        }
        if (!
strcmp(com,"del")) {
            
finish clock();
            
// если с отправки сообщения прошло больше минуты 
            
if((double)(finish start) / CLOCKS_PER_SEC 60 )
            
cout<<"Cannot be canceled"<<endl;
            else
            
del(p,i);
            
com[0]='\0';
        }
        if (!
strcmp(com,"quit")) {
            
closesocket((SOCKET)newS);
            exit(
EXIT_SUCCESS);
            
com[0]='\0';
        }
    }
}

int main() {
    
WORD wVersionRequested;
    
WSADATA wsaData;
    
int err;
    
wVersionRequested MAKEWORD(2,2);
    
err WSAStartup(wVersionRequested, &wsaData); 
    if(
err != 0) return -1;

    
sockaddr_in local;
    
local.sin_family AF_INET;
    
local.sin_port htons(1280); 
    
local.sin_addr.s_addr htonl(INADDR_ANY);
    
SOCKET s socket(AF_INETSOCK_STREAM,0);

    
int c=bind(s,(struct sockaddr*)&local,sizeof(local));
    
int r=listen(s,5);

    while(
true) {
        
sockaddr_in remote;
        
int j sizeof(remote);
        
SOCKET newS accept(s, (struct sockaddr*) &remote, &j);

        
_beginthread(SMSworking,0,(void*)newS);
    }
    
WSACleanup();
    return 
0;

Клиент:
PHP код:
#include <winsock2.h>
#include <iostream>
using namespace std;

int main() {
    
WORD wVersionRequested;
    
WSADATA wsaData;
    
int err;
    
wVersionRequested MAKEWORD(2,2);
    
err WSAStartup(wVersionRequested, &wsaData); 
    if(
err != 0) return -1

    
struct sockaddr_in peer;
    
peer.sin_family=AF_INET;
    
peer.sin_port=htons(1280);
    
peer.sin_addr.s_addr=inet_addr("127.0.0.1"); 

    
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
    
connect(s,(struct sockaddr*) &peer,sizeof(peer)); 

    
char b[200], buf[200]; 

    
recv(s,b,sizeof(b),0);
    
cout<<b
    
b[0]='\0';
    while (
strcmp(b,"quit")) {
        
cin.getline(b,200,'\n');
        
send(s,b,sizeof(b),0);
    }
    
WSACleanup();
    return 
0;

Скрины:
Сервер

Клиент

Блокнот
Skullet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При отправке сообщения шифрует 4?4?4?4?4?5? таким образом FleXik Общие вопросы Delphi 5 17.11.2012 22:45
Ввод - сделать так, чтобы в Edit можно было вводить только цифры, или на оборот, только буквы BastAngel Общие вопросы Delphi 7 27.04.2012 01:15
Какую надо задать маску для MaskEdit, чтобы можно было вводить только цифры (притом с запятой)? Polotenchik Компоненты Delphi 24 17.07.2009 21:29
Как сделать, чтобы форму можно было перемещать только внутри главной формы SeregaKo Общие вопросы Delphi 7 26.03.2009 12:48
Как сделать так, чтобы форму можно было тостать не только за заголовок? Никки Общие вопросы Delphi 1 04.09.2008 14:34