Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе / 16 сообщений из 16, страница 1 из 1
17.10.2014, 07:57
    #38779329
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Отправляю данные, как разделить их на сервере, т.е. получить одно сообщение вывести его. затем второе, вывести его и т.д. У меня получается так что принимаю соощение,потом второе и т.д. и потом вывожу все вместе на сервере.

Код на клиенте
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Player1 = GameObject.FindGameObjectWithTag ("Player");
		collids = GameObject.FindGameObjectsWithTag ("collid");
		byte[] Buffer;
		string data = "player(" + Player1.transform.localPosition.x.ToString () + ", " +
			Player1.transform.localPosition.y.ToString () + ", " +
				Player1.transform.localPosition.z.ToString () + ")";
		Buffer = Encoding.ASCII.GetBytes(data);
		client1.GetStream ().Write (Buffer,0,Buffer.Length);
		client1.GetStream().Flush();
		Array.Clear (Buffer,0, Buffer.Length);	
		foreach (GameObject element in collids) {

			data =  " collid(" + element.transform.localPosition.x.ToString() + ", "
				+ element.transform.localPosition.y.ToString() + ", "
					+ element.transform.localPosition.z.ToString() + ")";	
			Buffer = Encoding.ASCII.GetBytes(data);
			client1.GetStream ().Write (Buffer,0,Buffer.Length);

			client1.GetStream().Flush();
			Array.Clear (Buffer,0, Buffer.Length);		
		}



сервер
Код: plaintext
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.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
#include <winsock2.h>
#include <stdio.h>
 
int main(void)
{
    WORD sockVer;
    WSADATA wsaData;
    int retVal;
 
    sockVer = MAKEWORD(2,2);
 
    WSAStartup(sockVer, &wsaData);
 
    //??????? ?????
    SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    if(servSock == INVALID_SOCKET)
    {
        printf("Unable to create socket\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
	SOCKADDR_IN sin;
    sin.sin_family = PF_INET;
    sin.sin_port = htons(90);
    sin.sin_addr.s_addr = INADDR_ANY;
    SOCKET clientSock;
 

    retVal = bind(servSock, (LPSOCKADDR)&sin, sizeof(sin));
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to bind\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
 
    //???????? ?????? ??????? ?????
    retVal = listen(servSock, 10);
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to listen\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
    //???? ???????
 clientSock = accept(servSock, NULL, NULL);
    
    if(clientSock == INVALID_SOCKET)
    {
        printf("Unable to accept\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
 
    char szReq[1024]; 
 while(1){
    retVal = recv(clientSock, szReq, 1024, 0);
 
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to recv\n");
        return SOCKET_ERROR;
    }
 
    printf("Got the request from client\n%s\n",szReq);
 
    char *szResp = "Response";
 
    printf("Sending response from server\n");
    retVal = send(clientSock, szResp, strlen(szResp), 0);
 
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to send\n");
        return SOCKET_ERROR;
    }
}
    //????????? ?????
    closesocket(clientSock);
    closesocket(servSock);
 
    WSACleanup();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}


Результат в картинке
...
Рейтинг: 0 / 0
17.10.2014, 08:13
    #38779339
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Картежник, ну а как бы вы к примеру в файл писали сообщения, чтобы из потом читать по одному?
...
Рейтинг: 0 / 0
17.10.2014, 08:14
    #38779341
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Barlone,

через \n ?
...
Рейтинг: 0 / 0
17.10.2014, 08:15
    #38779342
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Barlone,

просто если вы заметили? первое сообщение вышло отдельно.а вот дальше пошло все вместе, но уже без первого сообщения
...
Рейтинг: 0 / 0
17.10.2014, 08:19
    #38779347
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
сделал так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
..
		foreach (GameObject element in collids) {

			data =  " collid(" + element.transform.localPosition.x.ToString() + ", "
				+ element.transform.localPosition.y.ToString() + ", "
					+ element.transform.localPosition.z.ToString() + ")\n";	
			Buffer = Encoding.ASCII.GetBytes(data);
			client1.GetStream ().Write (Buffer,0,Buffer.Length);

			client1.GetStream().Flush();
			Array.Clear (Buffer,0, Buffer.Length);		
		}


но результат все равно не тот который нужен
...
Рейтинг: 0 / 0
17.10.2014, 09:32
    #38779417
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Картежник,

в TCP нет сообщений - только поток

поэтому нужно использовать разделители или сообщение предварять длиной последующих данных или уметь каким либо ещё способом из потока выделять отдельные сообщения.

recv может получить не целиком сообщение или группу сообщений, а его часть- это тоже следует иметь ввиду
...
Рейтинг: 0 / 0
17.10.2014, 09:48
    #38779439
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
ок теперь все понятно
...
Рейтинг: 0 / 0
17.10.2014, 10:32
    #38779494
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Картежник,

как ты уже наверное понял, тебе придется делать свой протокол поверх TCP.

Поэтому я бы тебе посоветовал использовать один из уже готовых - подойдет XMPP.
...
Рейтинг: 0 / 0
17.10.2014, 11:20
    #38779575
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
MasterZiv,

по виду больше на RPC смахивает, да и клиент на c#

стрелять из пушки - так из большой , типа Apache Thrift
...
Рейтинг: 0 / 0
17.10.2014, 13:40
    #38779944
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
SMTP :)
...
Рейтинг: 0 / 0
17.10.2014, 21:53
    #38780573
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Изопропил,

Игрушка в unity3d -клиент и сервер на с++.
...
Рейтинг: 0 / 0
17.10.2014, 22:04
    #38780576
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
КартежникИгрушка в unity3d -клиент и сервер на с++.
можно и без тяжёлой артиллерии на коленке слепить

максимальное количество клиентов - каково?
...
Рейтинг: 0 / 0
17.10.2014, 22:10
    #38780579
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Изопропил,

я точно незнаю,думаю будут комнаты штук 50 наверно в каждой комнате может по 10 человек.что то в этом роде
...
Рейтинг: 0 / 0
17.10.2014, 22:11
    #38780580
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Картежник,

скорее всего и серверов будет несколько.
...
Рейтинг: 0 / 0
17.10.2014, 22:12
    #38780581
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
ну это конечно если попрет ))))
...
Рейтинг: 0 / 0
19.10.2014, 00:26
    #38780875
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Вот такой клиент отправляет данные следующим образом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public TcpClient client1;
...
try{
		client1 = new TcpClient ("127.0.0.1",90);
		}
		catch(SocketException ex){
			Debug.Log(ex);		
		}
data = "Hello \n";
		Buffer = Encoding.ASCII.GetBytes(data);
		client1.GetStream ().Write (Buffer,0,Buffer.Length);
		
		client1.GetStream().Flush();
		Array.Clear (Buffer,0, Buffer.Length);



А как теперь можно получить ответ?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]