Вопрос1 подскажите как организовать передачу сообщений между ними. на клиенте есть события Update(при отрисовке) и OnGUI(при действиях пользователя я так понял). При Update должен получать сообщения от сервера и корректировать обстановку, а при OnGUI отправлять сообщения серверу о действиях клиента(новые координаты).
Вопрос2 не будет ли корректировка обстановки опять вызывать Update() при которой опять будет происходить корректировка обстановки и т.д.
Вопрос3 правильно ли организован сервер?
int main(void)
{
WORD sockVer;
WSADATA wsaData;
long 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(todo){
retVal = recv(clientSock, szReq, 1024, 0);
.....
s1=myparse(szReq);
.....
if(retVal == SOCKET_ERROR)
{
printf("Unable to recv\n");
return SOCKET_ERROR;
}
char *szResp = "Response";
if(retVal == SOCKET_ERROR)
{
printf("Unable to send\n");
return SOCKET_ERROR;
}
retVal = send(clientSock, s1.c_str(), s1.length(), 0);
ZeroMemory(szReq,1024);
}
closesocket(clientSock);
closesocket(servSock);
WSACleanup();
system("PAUSE");
return EXIT_SUCCESS;
Вопрос4 ну и клиент?
void Awake(){
ip = "127.0.0.1";
//ip = "37.151.21.7";
port = 90;
s = "";
ss = "";
localEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
// Create a TCP/IP socket.
client1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try{
client1.Connect (localEndPoint);
Debug.Log ("Connected");
}
catch{
Debug.Log("Can't connect");
}
....
}
void Update () {
byte[] Buffer;
string data = "";
Buffer = Encoding.ASCII.GetBytes(data);
Array.Clear (Buffer,0, Buffer.Length);
client1.Receive (Buffer);
data = Encoding.ASCII.GetString (Buffer);
//Debug.Log (data);
s = s + data;
.....
if (ss != "") {
myparse (ss);
}
Array.Clear (Buffer,0, Buffer.Length);
}
void OnGUI () {
byte[] Buffer;
string data;
data = "begin \n";
Buffer = Encoding.ASCII.GetBytes(data);
client1.Send (Buffer);
Array.Clear (Buffer,0, Buffer.Length);
data = "player " + Player1.transform.localPosition.x.ToString () + " " +
Player1.transform.localPosition.y.ToString () + " " +
Player1.transform.localPosition.z.ToString () + " \n";
Buffer = Encoding.ASCII.GetBytes(data);
client1.Send (Buffer);
Array.Clear (Buffer,0, Buffer.Length);
data = "the_end \n";
Buffer = Encoding.ASCII.GetBytes(data);
client1.Send (Buffer);
Array.Clear (Buffer,0, Buffer.Length);
}
Все это работает сек 20-30 и затем останавливается пока не выключу сервер