Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Presbiopia - la 43 ani ?

Termen transcriere autovehicul

Cazare Timisoara pe 4-5 zile

Primele zile ale internetului per...
 Ditra 25

Casti USB-C ptr A-54

Aplicatie medicala / asistent med...

De ce vor atația politicieni...
 ERR_ADDRESS_UNREACHABLE

Legea 18/1968 Se mai aplica?

Digi conectare 2 routere prin fir

Succesiune notar versus instanta ...
 Montaj aer conditionat in balcon ...

Cont curent mulți valuta far...

Sugestii plan casa

Experiente cu firme care cumpara ...
 

Problema joc - socket python

- - - - -
  • Please log in to reply
9 replies to this topic

#1
serjnho

serjnho

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 14.05.2011
Salutare,
Imi cer scuze daca s-a mai postat problema asta anterior.
Incerc sa fac un joc(x si 0) sa functioneze in Ubuntu in limbajul Python 2.7 dar m-am blocat in anumite locuri. Ideea este sa creez un server care sa dirijeze doi clienti.
Problema:
Serverul trimite tabelul si mesajul ca e mutarea clientului x :
sendBoards()
client_list[currentPlayer].sendall('Mutarea ta')

Clientul primeste atat tabela cat si randul cu Mutarea ta. Doar ca pe client am facut un IF astfel incat sa merg mai departe in functie de ultimul mesaj, in cazul de fata Mutarea ta :
data = s.recv(BUFFER)
print data, '\n'
if (data == 'Mutarea ta'):
In cazul de fata data nu cuprinde doar ultimul rand('Mutarea ta'), ci tot bufferul.. Cum as putea sa modific astfel incat sa am la argument la IF ultimul rand din buffer ?
Multumesc anticipat.

#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Introduci un separator gen \n care sa te ajute sa spargi ce primesti in mesaje individuale. Neaparat verifici sa ai mereu separatorul la final, altfel poate primesti doar Mutar intr-un apel la recv si-l interpretezi gresit, cand defapt restul e inca "pe fir".

#3
serjnho

serjnho

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 14.05.2011
Multumesc mult. Am incercat sa pun si separator. Pe client primesc mereu :
Current Board:

------------------

___________

___________

Mutarea ta

Si eu in IF am :
data = s.recv(BUFFER)
print data, '\n'
if (data == 'Mutarea ta'):

Si data vad ca ia tot BUFFER nu doar ultimul rand..

#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007

 dani.user, on 13 mai 2017 - 10:59, said:

Introduci un separator gen \n care sa te ajute sa spargi ce primesti in mesaje individuale.

Nu vad sa fi implementat inca partea asta.

#5
serjnho

serjnho

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 14.05.2011
pe server am facut asta:
sendBoards()
client_list[currentPlayer].sendall('\nMutarea ta\n')
print 'Se asteapta playerul', currentPlayer, '...\n'
if (currentPlayer==0): client_list[1].sendall('Nu e inca randul tau')
if (currentPlayer==1): client_list[0].sendall('Nu e inca  randul tau')

Pe client asta:
data = s.recv(BUFFER)
print data, '\n'
if (data == '\nMutarea ta\n'):
  move = raw_input("Fa o mutare (Introdu 0-8): ")
  print 'Ai selectat ', move
  s.sendall(move)

Inca nu ma pricep prea bine pe partea asta..

#6
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
data = s.recv(...)
split data dupa \n => array de comenzi (mai putin ultima pe care o lasi acolo si o procesezi dupa ce mai primesti cel putin inca un \n)
pentru fiecare element in comenzi, compari cu "Mutarea ta" sau altele

#7
serjnho

serjnho

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 14.05.2011

 dani.user, on 13 mai 2017 - 12:17, said:

data = s.recv(...)
split data dupa \n => array de comenzi (mai putin ultima pe care o lasi acolo si o procesezi dupa ce mai primesti cel putin inca un \n)
pentru fiecare element in comenzi, compari cu "Mutarea ta" sau altele
Scuza-ma dar nu prea am inteles exact ce trebuie sa modific BUFFER este 1024..

#8
serjnho

serjnho

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 14.05.2011
def sendBoards():
printBoard()
for i in range(0,2):
  theBoard = ""
  theBoard += '\nTabelul: \n\n'+' '+str(board[0])+' '+'|'+' '+str(board[1])+' '+'|'+' '+str(board[2])+'\n---+---+---\n'+' '+str(board[3])+' '+'|'+' '+str(board[4])+' '+'|'+' '+str(board[5])+'\n---+---+---\n'+' '+str(board[6])+' '+'|'+' '+str(board[7])+' '+'|'+' '+str(board[8])+'\n'
  client_list[i].sendall(theBoard)

Asta e boardul..

#9
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Trebuie să citești tot bufferul, și apoi să îl parsezi și să extragi din el doar ce te interesează.

#10
serjnho

serjnho

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 14.05.2011
Am rezolvat . Multumesc tuturor. TC

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate