Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

winsock.h

5.9K
21 сентября 2013 года
qwerpoi
17 / / 31.05.2010
Программа на с++, зародыш чата. IDE Code::Blocks. На одном компьютере работает, на другом нет (компилировалась на каждом отдельно).
Адрес и порт свои и собеседника берет из специально созданного текстового файла. Две копии программы в разных папках с разными такими файлами обмениваются друг с другом данными.

Картинки скажут все яснее:

На одном компе:

На другом:


Код программы (хотя он, по моему, невиноват):

Код:
#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;

};


Кто-нибудь может объяснить почему так происходит, пожалуйста?
414
22 сентября 2013 года
CassandraDied
763 / / 24.05.2012
Meander, рискну предположить, что ТС под ошибкой имел в виду, что сообщение не пришло. :)
qwerpoi, ешё неплохо проверять настройки ФВ и АВ.
414
22 сентября 2013 года
CassandraDied
763 / / 24.05.2012
Цитата:

Return value
If no error occurs, bind returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.

446
22 сентября 2013 года
Meander
487 / / 04.09.2011
А почему вы думаете, что у вас ошибка? В чем она? Кракозябры? Так не надо использовать никчемные региональные кодировки, в стандарте языка ясно сказано: "пиши на ASCI", вот и используй только латиницу. Шрифты, кодировки, GUI нужны изнеженным юзерам и только. Так что это можно добавить в конце разработки в виде небольшого плагина, в знак снисхождения к конечному пользователю, и за солидное вознаграждение, разумеется.
5.9K
22 сентября 2013 года
qwerpoi
17 / / 31.05.2010
Да, я имел в виду непришедшее сообщение. Кракозябры это ерунда.
CassandraDied, наверное вы правы.
Я просто надеялся, что может я что-то не так написал, есть же такие конструкции которые на одном комьютере будут работать а на другом нет.
Спасибо всем
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог