Socket. Помогите начать...
1.Если кто сталкивался с сетевым программированием напишите как мне начать плиз, что лучше исспользовать для написания многопоточного сервера и клиента, WinSockets или MFC.
2.Нубическая проблема: не могу добраться до свойств Text у Edit, Caption y Button & Static.
Я не давно начал разбираться с Visual C++ 2005 и MFC. Я просто в шоке после C++ Builder'а, еле создал форму с TabControl, а с сокетами ваще труба, не могу найти никакого нормального примера, везде не доконца обьясняют.
1.Если кто сталкивался с сетевым программированием напишите как мне начать плиз, что лучше исспользовать для написания многопоточного сервера и клиента, WinSockets или MFC.
2.Нубическая проблема: не могу добраться до свойств Text у Edit, Caption y Button & Static.
1. Лучше использовать класс CSocket. В нем почти такие же команды как и в WinSock только удобнее работать.
2. SetWindowText("бла-бла");
Меня лично интересует реализация многопоточного сервера и клиента для обмена сообщениями и файлами.
Может есть какие-нибудь сайты или книги в которых все доступно и полно описано. Ато я еще не видел ни одного сайта где доходчиво был описан CSocket от и до. Везде написано: ну обьяви переменную типа сокет, ну присвой ему порт, на некоторых сайтах про Accept и Listen написано, а дальше делай че хош ... и все... Такое чувство что никто толком не знает как с ними работать, а те кто знает не говорит... Даже в MSDN (бесплатном) толком найти ничего не смог.
Меня лично интересует реализация многопоточного сервера и клиента для обмена сообщениями и файлами.
Тоже недавно озаботился этим вопросом. Вот мои старые клиент с сервером(просто банально обменваются сообщениями и то криво, приходит тогда, когда отправляешь, сенд-ресив нужно переделать). Написаны, конечно, совершенно чудовищно, но принцип работы понятен, разумеется, есть и альтернативные способы.
КЛИЕНТ:
#include "winsock.h"
#define ANSW_CLNT "answ from clnt\n"
WSADATA wsadata;
char buf[64], buf_2[64];
struct hostent *hp;
struct sockaddr_in clnt_sin, srv_sin;
int s, erc, erb, er, erclose, lenght, len, perem;
void main()
{
using namespace std;
WSAStartup(0x0101, &wsadata);
s = socket(AF_INET, SOCK_STREAM, 0);
memset((char*)&clnt_sin, ' ', sizeof(clnt_sin));
clnt_sin.sin_family = AF_INET;
clnt_sin.sin_addr.s_addr = INADDR_ANY;
clnt_sin.sin_port = 1235;
erb = bind(s, (struct sockaddr*)&clnt_sin, sizeof(clnt_sin));
memset((char*)&srv_sin, ' ', sizeof(srv_sin));
hp = gethostbyname("name");// имя хоста.
srv_sin.sin_family = AF_INET;
srv_sin.sin_port = 1234;
memcpy((char*)&srv_sin.sin_addr, hp->h_addr, hp->h_length);
erc = connect(s, (struct sockaddr*)&srv_sin, sizeof(srv_sin));
er = WSAGetLastError();
while(true)
{
cout<<"write: "<<endl;
cin>>buf_2;
lenght = recv(s, buf, 64, 0);
lenght = send(s, buf_2, sizeof(ANSW_CLNT), 1);
cout<<buf<<endl;
}
cout<<buf;
shutdown(s, 0);
erclose = closesocket(s);
cin>>perem;
exit(0);
}
СЕРВЕР:
#include "winsock.h"
#define ANSW "question srv"
WSADATA wsadata;
struct sockaddr_in ifs, new_ifs;
char buf[64], buf_2[64];
int s_list, new_s, new_len, ersend, erb, erlist, erclose, lenght, len, perem;
void main()
{
using namespace std;
new_len = sizeof(new_ifs);
WSAStartup(0x0101, &wsadata);
s_list = socket(AF_INET, SOCK_STREAM, 0);
memset((char*)&ifs, ' ', sizeof(ifs));
ifs.sin_family = AF_INET;
ifs.sin_addr.s_addr = INADDR_ANY;
ifs.sin_port = 1234;
erb = bind(s_list, (struct sockaddr*)&ifs, sizeof(ifs));
erlist = listen(s_list, 3);
new_s = accept(s_list, (struct sockaddr*)&new_ifs, &new_len);
while(true)
{
cout<<"write: "<<endl;
cin>>buf_2;
ersend = send(new_s, buf_2, sizeof(buf_2), 1);
lenght = recv (new_s, buf, 64, 0);
cout<<buf<<endl;
}
cout<<buf;
shutdown (new_s, 0);
erclose = closesocket(new_s);
cin>>perem;
}
вот такой ужоз))
кстати, взял из какого-то мануала по сокетам, но не работало либо по причине кривости рук, либо ещё из-за чего..
переделал запахало.
Я не давно начал...
[COLOR=red]Здесь[/COLOR] посмотри.