powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
16 сообщений из 16, страница 1 из 1
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
    #38779329
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отправляю данные, как разделить их на сервере, т.е. получить одно сообщение вывести его. затем второе, вывести его и т.д. У меня получается так что принимаю соощение,потом второе и т.д. и потом вывожу все вместе на сервере.

Код на клиенте
Код: 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
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
    #38779339
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежник, ну а как бы вы к примеру в файл писали сообщения, чтобы из потом читать по одному?
...
Рейтинг: 0 / 0
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
    #38779341
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone,

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

просто если вы заметили? первое сообщение вышло отдельно.а вот дальше пошло все вместе, но уже без первого сообщения
...
Рейтинг: 0 / 0
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
    #38779347
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал так
Код: 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
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
    #38779417
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежник,

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

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

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

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

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

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

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

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

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

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

скорее всего и серверов будет несколько.
...
Рейтинг: 0 / 0
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
    #38780581
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну это конечно если попрет ))))
...
Рейтинг: 0 / 0
Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
    #38780875
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой клиент отправляет данные следующим образом
Код: 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
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Socket.Как получать и выводить каждое сообщение отдельно, а не сразу вместе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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