Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
22 / 21 / 11
Регистрация: 08.04.2010
Сообщений: 90
1

клиент-сервер

20.05.2011, 01:34. Показов 2030. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Простой чат(клиент отправляет на сервер сообщение,сервер получает и так же может отправить клиенту сообщение).Всё работает,только если в сообщение пробел,то у получающего сообщение на экране слова пишутся слитно и получает он его не одним сообщением,а двумя.Хотелось бы исправить ошибку,только вот ничего не выходит.Помогите,пожалуйста)

клиент
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#include <conio.h>
#define MessSize 100
 
using namespace std;
DWORD WINAPI Reading(LPVOID pinfo);
DWORD WINAPI Writting(LPVOID pinfo);
 
int _tmain(int argc, _TCHAR* argv[])
{char* mes=new char[100];
int meslen = 100;
WSADATA ws;
 WSAStartup(MAKEWORD(2,0),&ws);
 setlocale(LC_ALL,"Russian_Russia.866");
SOCKET sock=socket (AF_INET,SOCK_STREAM,0);
sockaddr_in  saddr ;    
memset(&saddr,0,sizeof(saddr));
saddr.sin_family=AF_INET;
saddr.sin_port=htons(80); 
saddr.sin_addr.s_addr=inet_addr("89.179.29.136");
if(connect(sock,(sockaddr*)&saddr,sizeof(saddr))==0)
{cout<<"connect is successful"<<endl;
 HANDLE handles[2];
 handles[0]=CreateThread(NULL,0,Reading,(LPVOID)&sock,0,NULL);
 handles[1]=CreateThread(NULL,0,Writting,(LPVOID)&sock,0,NULL);
 WaitForMultipleObjects(2,handles,FALSE,INFINITE);
 CloseHandle(handles[0]);
 CloseHandle(handles[1]);
}
else cout<<"no connect"<<endl;
closesocket (sock);
WSACleanup();
return 0;
}
 
DWORD WINAPI Writting(LPVOID pinfo)
{  wprintf(L"Запись...\n");
   SOCKET sock=*(SOCKET*)pinfo;
   for(;;)
  {  wchar_t Mess[MessSize];
     wmemset(Mess,0,MessSize);
     wprintf(L">");
     wscanf(L"%100s",Mess);
     send(sock,(char*)Mess,wcslen(Mess)*sizeof(wchar_t),0);
     if (wcscmp(Mess,L"всего")==0)
         ExitThread(1);
  }
}
DWORD WINAPI Reading(LPVOID pinfo)
{ wprintf(L"Чтение...\n");
  SOCKET sock=*(SOCKET*)pinfo;
  for(;;)
  {  char Mess[MessSize];
     memset(Mess,0,MessSize);
     if(recv(sock,(char*)Mess,MessSize*sizeof(char),0)==-1)
         ExitThread(1);
     wprintf(L"Сообщение: %s\n",Mess);
     if (strcmp(Mess,"всего")==0)
         ExitThread(1);
  }
}
сервер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#include <conio.h>
#define MessSize 100
 
using namespace std;
DWORD WINAPI Reading(LPVOID pinfo);
DWORD WINAPI Writting(LPVOID pinfo);
 
int _tmain(int argc, _TCHAR* argv[])
{char* mes=new char[100];
int meslen = 100;
WSADATA ws;
 WSAStartup(MAKEWORD(2,0),&ws);
 setlocale(LC_ALL,"Russian_Russia.866");
SOCKET sock=socket (AF_INET,SOCK_STREAM,0);
sockaddr_in  baddr,addrclient;  
baddr.sin_family=AF_INET;
baddr.sin_port=htons(80);
baddr.sin_addr.s_addr=0;
bind(sock,(sockaddr*)&baddr,sizeof(baddr));
listen(sock,SOMAXCONN);
 int size=sizeof(addrclient);
for(;;)
{ 
 SOCKET clientsock=accept(sock,(sockaddr*)&addrclient,&size);
 if(clientsock!=INVALID_SOCKET)
 {
 HANDLE handles[2];
 handles[0]=CreateThread(NULL,0,Reading,(LPVOID)&clientsock,0,NULL);
 handles[1]=CreateThread(NULL,0,Writting,(LPVOID)&clientsock,0,NULL);
 WaitForMultipleObjects(2,handles,FALSE,INFINITE);
 CloseHandle(handles[0]);
 CloseHandle(handles[1]);
 shutdown(clientsock,0);
 closesocket(clientsock);
}   else cout<<"error";
}
shutdown(sock,0);
    closesocket(sock);
return 0;
}
 
DWORD WINAPI Writting(LPVOID pinfo)
{  wprintf(L"Запись...\n");
   SOCKET sock=*(SOCKET*)pinfo;
   for(;;)
  {  wchar_t Mess[MessSize];
     wmemset(Mess,0,MessSize);
     wprintf(L">");
     wscanf(L"%100s",Mess);
     send(sock,(char*)Mess,wcslen(Mess)*sizeof(wchar_t),0);
     if (wcscmp(Mess,L"всего")==0)
         ExitThread(1);
  }
}
DWORD WINAPI Reading(LPVOID pinfo)
{ wprintf(L"Чтение...\n");
  SOCKET sock=*(SOCKET*)pinfo;
  for(;;)
  {  char Mess[MessSize];
     memset(Mess,0,MessSize);
     if(recv(sock,(char*)Mess,MessSize*sizeof(char),0)==-1)
         ExitThread(1);
     wprintf(L"Сообщение: %s\n",Mess);
     if (strcmp(Mess,"всего")==0)
         ExitThread(1);
  }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2011, 01:34
Ответы с готовыми решениями:

Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент
Добрый день всем. Проблема заключается в следующем: Есть клиент-серверное приложение, хочу...

Tcp ip клиент-сервер C++ сервер выводит мусор
server # include &lt;sys/types.h&gt; # include &lt;iostream&gt; # include &lt;winsock2.h&gt; # include...

Клиент/сервер: клиент посылает серверу слово; определить, является ли это слово палиндромом
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и...

КЛИЕНТ-СЕРВЕР
Попробовала изменить сервер следующим образом: #define _WINSOCK_DEPRECATED_NO_WARNINGS #define...

2
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
20.05.2011, 01:37 2
"wscanf(L"%100s",Mess);"
у scanf() естественный разделитель - пробел.
вам надо что-то наподобие gets() или getline()
1
22 / 21 / 11
Регистрация: 08.04.2010
Сообщений: 90
20.05.2011, 01:44  [ТС] 3
ага,ясно)
мне говорили использовать getch,а,наверное,имели в виду gets) я всё не могла понять,как getch может помочь +)
спасибо)
0
20.05.2011, 01:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2011, 01:44
Помогаю со студенческими работами здесь

Клиент и сервер
Здравствуйте, понимаю что тема уже не раз поднималась, но... В сервере функция accept видает...

Клиент-сервер
Здравствуйте, пишу маленький проект, сервер на ++, клиент на шарпах, и падает сервер, не могу...

Клиент+Сервер
Здравствуйте люди!Помогите с созданием архитектуры клиент сервер с созданием сокета и отдельно RPC...

Клиент - сервер
Здравствуйте! У меня возникла проблема с &quot;клиент сервер&quot; программой . Не могу найти пример ....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru