Hello ,
I have chaged the code as per your input, except port number. If i change the port number it give me error as Traceback (most recent call last): File "C:\Users\Pramod\Desktop\client.py", line 7, in <module> client_socket.connect((server_address,server_port)) ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it Server code: import socket server_socket=socket.socket() server_name='192.168.2.2' server_port= 80 server_socket.bind((server_name,server_port)) server_socket.listen(5) while True: print("hello") c,address=server_socket.accept() print("acception the connection") print("we got connection from:",address) c.send("hello,hw ru") c.close() Client Code: import socket client_socket=socket.socket() server_address='192.168.2.2' server_port= 80 print("port number entered") client_socket.connect((server_address,server_port)) print("it is connected") data=client_socket.recv(1024) print("received:",data) client_socket.close() print('finished') Output : port number entered it is connected received: *b''* finished In the above output expected data is 'hello,hw ru' from the server and print("acception the connection") print("we got connection from:",address) the above print statements are not executed. Thanks and Regards, Pramod SP Regards, Pramod SP On Sat, Jan 3, 2015 at 8:39 PM, <tutor-requ...@python.org> wrote: > Send Tutor mailing list submissions to > tutor@python.org > > To subscribe or unsubscribe via the World Wide Web, visit > https://mail.python.org/mailman/listinfo/tutor > or, via email, send a message with subject or body 'help' to > tutor-requ...@python.org > > You can reach the person managing the list at > tutor-ow...@python.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Tutor digest..." > > > Today's Topics: > > 1. Re: Improving My Simple Game Code for Speed, Memory and > Learning (Dave Angel) > 2. Socket programming (pramod gowda) > 3. Re: Socket programming (Alan Gauld) > 4. Re: Improving My Simple Game Code for Speed, Memory and > Learning (Steven D'Aprano) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Sat, 03 Jan 2015 06:58:34 -0500 > From: Dave Angel <da...@davea.name> > To: tutor@python.org > Subject: Re: [Tutor] Improving My Simple Game Code for Speed, Memory > and Learning > Message-ID: <54a7d96a.6040...@davea.name> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed > > On 01/02/2015 10:21 PM, Dave Angel wrote: > > On 01/02/2015 09:00 PM, WolfRage wrote: > >> Python3.4+ Linux Mint 17.1 but the code will be cross platform (Mobile, > >> Windows, Linux, OSX). > >> > >> First an explanation of how the game works: The game is a simple > >> matching game but with a twist. Instead of matching a straight 3 in a > >> row, we have some rules that only certain combinations will result in an > >> elimination. In general 2 of the same value in a row with with 1 of 2 > >> other possible values will eliminate all three nodes. Eliminations can > >> occur either horizontally or vertically but not diagonally. Each tile > >> has a value now, that value is used when evaluating the rules. Currently > >> there are only 5 allowed values of 0-4 although more could be added > >> later, so any solution needs to be expandable. > >> These are the basic rules that allow for an elimination to occur(values > >> are put in quotes to distinguish values): > >> 2 "5"s followed or proceeded by a "19" will eliminate all 3 nodes. > >> 2 "5"s followed or proceeded by an "11" will eliminate all 3 nodes. > >> 2 "6"s followed or proceeded by a "5" will eliminate all 3 nodes. > >> 2 "6"s followed or proceeded by a "19" will eliminate all 3 nodes. > >> 2 "11"s followed or proceeded by a "6" will eliminate all 3 nodes. > >> 2 "11"s followed or proceeded by a "20" will eliminate all 3 nodes. > >> 2 "19"s followed or proceeded by a "20" will eliminate all 3 nodes. > >> 2 "19"s followed or proceeded by an "11" will eliminate all 3 nodes. > >> 2 "20"s followed or proceeded by a "6" will eliminate all 3 nodes. > >> 2 "20"s followed or proceeded by a "5" will eliminate all 3 nodes. > >> > >> The main focus of the code is the find_eliminations method. I think its > >> implementation is smart since it uses a math trick, but then again I > >> wrote it. > >> My math trick works by first finding 2 matching nodes next to each other > >> out of every 3 nodes, then adding the values of all 3 nodes together and > >> checking for specific totals. None of the possible totals overlap. > >> > >> Here is the code: > >> > >> import random > >> > >> > >> class GameTile(): > >> def __init__(self, value, col, row, **kwargs): > >> # id is grid (X,Y) which is equal to grid (col,row) > >> self.id = str(col) + ',' + str(row) > >> self.col = col > >> self.row = row > >> self.value = value > >> self.eliminated = False > >> > >> def __str__(self): > >> #return '%d, %d' % (self.col, self.row) > >> if len(str(self.value)) == 1: > >> return ' ' + str(self.value) > >> return str(self.value) > >> > >> > >> class GameGrid(): > >> def __init__(self, cols=8, rows=7, **kwargs): > >> self.cols = cols > >> self.rows = rows > >> self.make_grid() > >> > >> def make_grid(self): > >> # grid is 2d array as x, y ie [x][y]. > >> self.grid = [] > >> for row_num in range(self.rows): > >> self.grid.append([GameTile(value=random.choice([5, 6, 11, > >> 19, 20]), col=col_num, > >> row=row_num) for col_num in range(self.cols)]) > >> > >> def print_by_col(self): > >> # As in going down the column assuming we started at the top. > >> for col_num in range(self.cols): > >> for row_list in self.grid: > >> print(row_list[col_num]) > >> > >> def print_by_row(self): > >> # As in going right across the row assuming we started at the > >> left. > >> for row in self.grid: > >> for node in row: > >> print(node) > >> > >> def check_bounds(self, x, y): > >> return (0 <= x < self.rows) and (0 <= y < self.cols) > >> > >> def lookup_node(self, x, y): > >> if not self.check_bounds(x, y): > >> return False > >> return self.grid[x][y] > >> > >> def draw(self): > >> for col in self.grid: > >> print(end='| ') > >> for node in col: > >> print(node, end=' | ') > >> print() > >> > >> def find_eliminations(self): > >> # I define 3 variables for holding the 3 nodes/tiles that I am > >> # currently checking to see if an elimination possibility > >> exists. > >> # It uses a math trick to check for elimination by adding the > >> values > >> # and checking for specific totals. None of the possible totals > >> overlap. > >> #First Down the columns. > >> for col_num in range(self.cols): > >> first = None > >> second = None > >> third = None > >> for row_list in self.grid: > >> if row_list[col_num].row == 0: > >> first = row_list[col_num] > >> elif row_list[col_num].row == 1: > >> second = row_list[col_num] > >> elif row_list[col_num].row == 2: > >> third = row_list[col_num] > >> else: > >> first = second > >> second = third > >> third = row_list[col_num] > > > > This code is way too complex for what it accomplishes. See below. > > > >> if third is not None: > >> self.check_total_and_eliminate(first, second, > third) > >> # Now across the rows. > >> for row in self.grid: > >> first = None > >> second = None > >> third = None > >> for node in row: > >> if node.col == 0: > >> first = node > >> elif node.col == 1: > >> second = node > >> elif node.col == 2: > >> third = node > >> else: > >> first = second > >> second = third > >> third = node > > > > If the self.rows is 3, this is equivalent to just: > > first, second, third = row > > If the self.rows is larger, it's equivalent to: > > first, second, third = row[p: p+3] for some value of p > > > >> if third is not None: > >> self.check_total_and_eliminate(first, second, > third) > > > > But even better, let the method check_total_and_eliminate take a slice > > as its argument. > > self.check-total_and_eliminate(row[p: p+3]) > > > >> # Set all eliminated nodes to a value of 0. > >> for col in self.grid: > >> for node in col: > >> if node.eliminated is True: > >> node.eliminated = False > >> node.value = 0 > >> > >> def check_total_and_eliminate(self, first, second, third): > >> total = None > >> if first.value == second.value: > >> total = first.value + second.value + third.value > >> elif second.value == third.value: > >> total = first.value + second.value + third.value > >> if total == 17 or total == 21 or total == 28 or total == 29 or > \ > >> total == 31 or total == 42 or total == 45 or total == 46 \ > >> or total == 49 or total == 58: > >> first.eliminated = True > >> second.eliminated = True > >> third.eliminated = True > >> > > > > This doesn't come close to implementing the test you describe above. For > > example, a total of 29 could be your first case, 5,5,19. But it could > > also be 4,4,21. Or 6,6,17. Etc. > > > > I suggest instead that you compare the values against a table of > > interesting values. If you make your table a list of 3-tuples, it can > > be searched simply by: > > if tuple(nodes) in table: > > do-something > > My error. Since nodes are GameTile objects, not values, converting to a > tuple is a little trickier: > > values = tuple( [node.value for node in nodes] ) > if values in table: > do-something > > > > > So you don't need the separate variables first, second, and third at all. > > > >> > >> > >> grid = GameGrid(4, 8) > >> grid.draw() > >> grid.find_eliminations() > >> print('After Eliminations') > >> grid.draw() > >> > >> > >> # END CODE > >> > >> After this part has been improved, I then need to search the columns > >> backwards to be able to drop any floating values. Any none zero values > >> should not have a zero value below it. That is what I mean by drop > >> floating values. I think this will be simple by just using range method > >> to count backwards. I will be working on coding that in the meantime. > >> > > > > for what you've described so far, it might be convenient to store the > > board and its transposed equivalent. Then search the one for columns, > > and the other for rows. That's a later optimization, but it might save > > time getting the more complicated parts figured out. > > > > For example, print_by_col would look just like print_by_row, except that > it would start with self.transposed_grid > > The only real assumption needed for this simplification is that once the > grid is set up, you never create any more GameTile objects, just > manipulate the existing rectangle of objects. > > To transpose a grid, you want to use the zip() function. > self.transposed_grid = zip(*self.grid) > > > -- > DaveA > > > ------------------------------ > > Message: 2 > Date: Sat, 3 Jan 2015 17:18:02 +0530 > From: pramod gowda <pramod.s...@gmail.com> > To: tutor@python.org > Subject: [Tutor] Socket programming > Message-ID: > <CAAqnBO9BgjtzNWrn5DwQLnrV3doLpq4zQVZ9r= > kgjg51v3y...@mail.gmail.com> > Content-Type: text/plain; charset=UTF-8 > > Hi, > > i am learning socket programming, > > client code: > > import socket > > client_socket=socket.socket() > server_address='192.168.2.2' > server_port= 80 > print("hello") > client_socket.connect((server_address,server_port)) > print("hello") > data=client_socket.recv(1024) > print(data) > client_socket.close() > > server code: > import socket > > server_socket=socket.socket() > server_name='192.168.2.2' > server_port= 80 > server_socket.bind((server_name,server_port)) > server_socket.listen(1) 3.4.2 > > while True: > print("hello") > c,address=server_socket.accept() > print("we got connection from:",address) > c.send("hello,hw ru") > c.close() > > > > > I am not getting the output, i am using windows 7 OS,pyhton ver:.. > please check and give me the solution. > Regards, > > Pramod SP > > > ------------------------------ > > Message: 3 > Date: Sat, 03 Jan 2015 13:20:01 +0000 > From: Alan Gauld <alan.ga...@btinternet.com> > To: tutor@python.org > Subject: Re: [Tutor] Socket programming > Message-ID: <m88q9u$i03$1...@ger.gmane.org> > Content-Type: text/plain; charset=windows-1252; format=flowed > > On 03/01/15 11:48, pramod gowda wrote: > > > client code: > > > > import socket > > > > client_socket=socket.socket() > > server_address='192.168.2.2' > > server_port= 80 > > see below regarding port numbers > > > print("hello") > > client_socket.connect((server_address,server_port)) > > print("hello") > > data=client_socket.recv(1024) > > print(data) > > client_socket.close() > > > I assume it is this code that is not doing what you expect? > Try using more descriptive print statements. > Also, when debugging, never use a print that could be blank, > always have a fixed string so you can see it. So instead of > > print(data) > > use > > print('Received: ', data) > > That way you can see that data was empty rather than that > the print didn't execute. > > I'd also put a print(finished') or similar after closing > the socket. > > > server code: > > import socket > > > > server_socket=socket.socket() > > server_name='192.168.2.2' > > server_port= 80 > > port 80 is usually reserved for http traffic, better > to choose a port number greater than 1024 for user > programs. > > > server_socket.bind((server_name,server_port)) > > server_socket.listen(1) > > I'd up the queue size to at least 3 or 5. > You are not leaving much room for errors. > > > while True: > > print("hello") > > c,address=server_socket.accept() > > print("we got connection from:",address) > > Is this print appearing OK? > > > c.send("hello,hw ru") > > I'd add a print here too, to verify that the send worked. > > > c.close() > > > I am not getting the output, i am using windows 7 OS,pyhton ver:.. > > please check and give me the solution. > > It's not clear what you mean by "the output". > Are you getting anything printed? At the client and the server? > > It might help to show us a cut n paste from both client > and server. > > -- > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > > > > ------------------------------ > > Message: 4 > Date: Sun, 4 Jan 2015 02:09:19 +1100 > From: Steven D'Aprano <st...@pearwood.info> > To: tutor@python.org > Subject: Re: [Tutor] Improving My Simple Game Code for Speed, Memory > and Learning > Message-ID: <20150103150916.gf27...@ando.pearwood.info> > Content-Type: text/plain; charset=us-ascii > > On Fri, Jan 02, 2015 at 09:00:22PM -0500, WolfRage wrote: > > Python3.4+ Linux Mint 17.1 but the code will be cross platform (Mobile, > > Windows, Linux, OSX). > > > > First an explanation of how the game works: The game is a simple > > matching game but with a twist. Instead of matching a straight 3 in a > > row, we have some rules that only certain combinations will result in an > > elimination. In general 2 of the same value in a row with with 1 of 2 > > other possible values will eliminate all three nodes. > > Do you mean "1 of 2" or "1 or 2"? > > > > Eliminations can > > occur either horizontally or vertically but not diagonally. Each tile > > has a value now, that value is used when evaluating the rules. Currently > > there are only 5 allowed values of 0-4 although more could be added > > later, so any solution needs to be expandable. > > Okay, so the values are 0, 1, 2, 3, and 4. This doesn't match your code > belong. Is the code wrong or your description? > > > > These are the basic rules that allow for an elimination to occur(values > > are put in quotes to distinguish values): > > 2 "5"s followed or proceeded by a "19" will eliminate all 3 nodes. > [...] > > Since neither 5 nor 19 is a possible value, this can never apply. > > All the other rules you give include values greater than 4, and likewise > can never apply. That means that no eliminations are ever possible. I > think your description needs some work :-) > > > > class GameTile(): > [...] > > def __str__(self): > > #return '%d, %d' % (self.col, self.row) > > if len(str(self.value)) == 1: > > return ' ' + str(self.value) > > return str(self.value) > > Eliminate comments which no longer apply. Don't use them for keeping > old, obsolete or wrong code. > > This method can be better written like this: > > def __str__(self): > return "%2d" % self.value > > > > class GameGrid(): > > def __init__(self, cols=8, rows=7, **kwargs): > > self.cols = cols > > self.rows = rows > > self.make_grid() > > > > def make_grid(self): > > # grid is 2d array as x, y ie [x][y]. > > self.grid = [] > > for row_num in range(self.rows): > > self.grid.append([GameTile(value=random.choice([5, 6, 11, > > 19, 20]), col=col_num, > > row=row_num) for col_num in range(self.cols)]) > > That's rather gnarly code. If you're going to do that, it's probably > nice to use a temporary variable to clarify your intention: > > for row_num in range(self.rows): > row = [GameTile( > value=random.choice([5, 6, 11,19, 20]), col=col_num, > row=row_num) for col_num in range(self.cols) > ] > self.grid.append(row) > > > Which is still pretty gnarly. You only have three arguments to GameTile, > why do you need to use keyword arguments? This is neater and less > noisy, although it does require you get the order right: > > # untested > for row_num in range(self.rows): > row = [GameTile(row_num, col_num, random.choice([5, 6, 11,19, > 20]) > for col_num in range(self.cols) > ] > self.grid.append(row) > > Even better: > > for row_num in range(self.rows): > self.make_row(row_num) > > def make_row(self, row_num): > values = self.allowed_values # [5, 6, 11,19, 20] > row = [GameTile(row_num, col_num, random.choice(values) > for col_num in range(self.cols)] > self.grid.append(row) > > > Notice that the values are stored in an attribute, for ease of > maintanence in the future when you extend them. > > > > def find_eliminations(self): > > # I define 3 variables for holding the 3 nodes/tiles that I am > > # currently checking to see if an elimination possibility exists. > > # It uses a math trick to check for elimination by adding the > values > > # and checking for specific totals. None of the possible totals > overlap. > > Sorry, I'm too tired to make sense of this function right now :-( > > > > def check_total_and_eliminate(self, first, second, third): > > total = None > > if first.value == second.value: > > total = first.value + second.value + third.value > > elif second.value == third.value: > > total = first.value + second.value + third.value > > if total == 17 or total == 21 or total == 28 or total == 29 or \ > > total == 31 or total == 42 or total == 45 or total == 46 \ > > or total == 49 or total == 58: > > first.eliminated = True > > second.eliminated = True > > third.eliminated = True > > I think this method does too much. I would prefer to see it split into > two methods, one to check the total, and the other to eliminate the > cells if needed: > > def eliminate(self, first, second, third): > first.eliminated = True > second.eliminated = True > third.eliminated = True > > def check_total(self, first, second, third): > if first.value == second.value or second.value == third.value: > total = first.value + second.value + third.value > return total in (17, 21, 28, 29, 31, 42, 45, 46, 49, 58) > > > which you then use: > > if self.check_total(first, second, third): > self.eliminate(first, second, third) > > > > > -- > Steven > > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > Tutor maillist - Tutor@python.org > https://mail.python.org/mailman/listinfo/tutor > > > ------------------------------ > > End of Tutor Digest, Vol 131, Issue 14 > ************************************** > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor