winsock.h
Адрес и порт свои и собеседника берет из специально созданного текстового файла. Две копии программы в разных папках с разными такими файлами обмениваются друг с другом данными.
Картинки скажут все яснее:
На одном компе:
На другом:
Код программы (хотя он, по моему, невиноват):
Код:
#include "mynetheader.h" // Wincosk2.h должен быть раньше windows!
#include <windows.h>
using namespace std;
DWORD WINAPI WaitForRecieve(LPVOID client_socket);
int main() {
setlocale(LC_CTYPE,"Russian");
AddrTable mybk;
myStartSession(&mybk); //Эта функция читает из файла адреса
WSADATA ssdfg5dg6dfg9;
char buff[1024];
int myport,flrwt=1,i;
WSAStartup(0x0202, &ssdfg5dg6dfg9);
for (i=0;i<1024;i++) buff[i]=0;
SOCKET mysocket;
mysocket = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(atoi(mybk.PortBook[0])%0xffff);
local_addr.sin_addr.s_addr = inet_addr(mybk.IpBook[0]);
cout<<"Your("<<mybk.NameBook[0]<<") Address "<<inet_ntoa(local_addr.sin_addr)<<":"<<atoi(mybk.PortBook[0])<<endl<<"Online:"<<endl;
for (i=1;i<mybk.NumOfP;i++) cout<<mybk.NameBook[i]<<" "<<mybk.IpBook[i]<<":"<<atoi(mybk.PortBook[i])<<endl;
bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr));
cout<<endl;
cout<<"Read,write(1-read, 0-write): ";//1-read
cin>>flrwt;
if (flrwt==1) {
myport=1;
while (myport==1) {
sockaddr_in client_addr;
int client_addr_size = sizeof(client_addr);
int bsize = recvfrom(mysocket,&buff[0],sizeof(buff)-1,0,(sockaddr *)&client_addr, &client_addr_size);
cout<<endl<<endl<<buff<<endl<<endl;
};
} else {
sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(atoi(mybk.PortBook[1]));
dest_addr.sin_addr.s_addr = inet_addr("127.0.0.10");
myport=1;
while (myport==1) {
for (i=0;i<1024;i++) buff[i]='z';/*
for (i=0;i<1024;i++) buff[i]=0;
for (i=0;i<1024;i++) buff[i]=0;
for (i=0;i<1024;i++) buff[i]=0;*/
cout<<"Write:"<<endl;
cin>>buff;
sendto(mysocket, &buff[0], strlen(&buff[0]), 0, (sockaddr *)&dest_addr, sizeof(dest_addr));
cout<<"write more?";
cin>>myport;
};
};
getch();
closesocket(mysocket);
WSACleanup();
return 0;
};
DWORD WINAPI WaitForRecieve(LPVOID client_socket) {
return 0;
};
#include <windows.h>
using namespace std;
DWORD WINAPI WaitForRecieve(LPVOID client_socket);
int main() {
setlocale(LC_CTYPE,"Russian");
AddrTable mybk;
myStartSession(&mybk); //Эта функция читает из файла адреса
WSADATA ssdfg5dg6dfg9;
char buff[1024];
int myport,flrwt=1,i;
WSAStartup(0x0202, &ssdfg5dg6dfg9);
for (i=0;i<1024;i++) buff[i]=0;
SOCKET mysocket;
mysocket = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(atoi(mybk.PortBook[0])%0xffff);
local_addr.sin_addr.s_addr = inet_addr(mybk.IpBook[0]);
cout<<"Your("<<mybk.NameBook[0]<<") Address "<<inet_ntoa(local_addr.sin_addr)<<":"<<atoi(mybk.PortBook[0])<<endl<<"Online:"<<endl;
for (i=1;i<mybk.NumOfP;i++) cout<<mybk.NameBook[i]<<" "<<mybk.IpBook[i]<<":"<<atoi(mybk.PortBook[i])<<endl;
bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr));
cout<<endl;
cout<<"Read,write(1-read, 0-write): ";//1-read
cin>>flrwt;
if (flrwt==1) {
myport=1;
while (myport==1) {
sockaddr_in client_addr;
int client_addr_size = sizeof(client_addr);
int bsize = recvfrom(mysocket,&buff[0],sizeof(buff)-1,0,(sockaddr *)&client_addr, &client_addr_size);
cout<<endl<<endl<<buff<<endl<<endl;
};
} else {
sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(atoi(mybk.PortBook[1]));
dest_addr.sin_addr.s_addr = inet_addr("127.0.0.10");
myport=1;
while (myport==1) {
for (i=0;i<1024;i++) buff[i]='z';/*
for (i=0;i<1024;i++) buff[i]=0;
for (i=0;i<1024;i++) buff[i]=0;
for (i=0;i<1024;i++) buff[i]=0;*/
cout<<"Write:"<<endl;
cin>>buff;
sendto(mysocket, &buff[0], strlen(&buff[0]), 0, (sockaddr *)&dest_addr, sizeof(dest_addr));
cout<<"write more?";
cin>>myport;
};
};
getch();
closesocket(mysocket);
WSACleanup();
return 0;
};
DWORD WINAPI WaitForRecieve(LPVOID client_socket) {
return 0;
};
Кто-нибудь может объяснить почему так происходит, пожалуйста?
qwerpoi, ешё неплохо проверять настройки ФВ и АВ.
А почему вы думаете, что у вас ошибка? В чем она? Кракозябры? Так не надо использовать никчемные региональные кодировки, в стандарте языка ясно сказано: "пиши на ASCI", вот и используй только латиницу. Шрифты, кодировки, GUI нужны изнеженным юзерам и только. Так что это можно добавить в конце разработки в виде небольшого плагина, в знак снисхождения к конечному пользователю, и за солидное вознаграждение, разумеется.
CassandraDied, наверное вы правы.
Я просто надеялся, что может я что-то не так написал, есть же такие конструкции которые на одном комьютере будут работать а на другом нет.
Спасибо всем