network programming
play

Network Programming Simulation Engines 2008 Chalmers University of - PowerPoint PPT Presentation

Network Programming Simulation Engines 2008 Chalmers University of Technology Markus Larsson markus.larsson@slxgames.com 08-11-26 Simulation Engines 2008, Markus Larsson 1 Networked games Most games are played against some form of


  1. Network Programming Simulation Engines 2008 Chalmers University of Technology Markus Larsson markus.larsson@slxgames.com 08-11-26 Simulation Engines 2008, Markus Larsson 1

  2. Networked games  Most games are played against some form of opponent  Last lecture we spoke about computer controlled opponents  This lecture we will discuss human controlled opponents  Human opponents often allows a lot more interesting gameplay  Massively Multiplayer Online Games are interesting examples 08-11-26 Simulation Engines 2008, Markus Larsson 2

  3. Example: Counterstrike  One of the most successful online games ever  Hundreds of thousands of active players 08-11-26 Simulation Engines 2008, Markus Larsson 3

  4. Example: World of Warcraft  Ridiculously successful MMOG, released by Blizzard on November 23rd, 2005  200 000 accounts were created during the first day 08-11-26 Simulation Engines 2008, Markus Larsson 4

  5. Networking issues Regardless of whether we want to create a small-scale networked  game such as Counterstrike or a huge MMOG like WoW the following issues need to be looked in to  Which network architecture is suitable for our game? Client/server or peer-to-peer (or a combination)?  What kind of network protocols are useful for a computer game?  How will we handle the issues of high lag (latency), low bandwidth, and packet loss that exist on the Internet?  The type of game naturally affects which kind of network programming techniques we will use. What differs from a small-scale and a massive-scale multiplayer game? Chalmers has many interesting courses on networking programing  in general and Internet programming in particular 08-11-26 Simulation Engines 2008, Markus Larsson 5

  6. Fundamentals Packet   Network message. All information sent over a network is split up into indivisible packets. Packets can be lost and may have to be resent depending on the protocol. Latency   Network “lag” or latency is the delay associated with the time between sending a message from a source and receiving it at the destination. Bandwidth   Maximum information rate that can be sent over a particular network connection (remember to distinguish bandwidth from latency!). 08-11-26 Simulation Engines 2008, Markus Larsson 6

  7. Fundamentals Packet loss   Most networks are not perfect, and packets might be lost due to corrupted links or collisions. Packet loss is a measure of how high ratio of all packets are lost in transmission. Protocol   Data format specification for embedding packets as well as routines for reliability, acknowledgment, transfer, etc. Network architecture   Topology of a particular network (or subset of a network) involved in a particular system or protocol instance. Most common examples in this context include peer-to-peer (P2P) and client-server (C/S) architectures. 08-11-26 Simulation Engines 2008, Markus Larsson 7

  8. Terms more related to games Lobby service  Players often need a virtual meeting place outside the game itself where  they can meet, chat, and form games. This place is often called a “lobby”, and a lobby service is a middleware allowing for the creation of such lobbies. Dead reckoning  The imperfect nature of the Internet means that games will be plagued by  high latency and high packet loss. This means that we will often be unable to send frequent updates of the object state to the players participating in a game. In order to avoid jerky in-game behaviour, each client extrapolates the position of the objects given their old position and velocity. Security  There are lots of malicious users on the Internet and we must take care to  protect our game as well as the players from these. Security in multiplayer games is a whole lecture in itself (maybe even a whole course!), but we will just talk briefly about this subject. 08-11-26 Simulation Engines 2008, Markus Larsson 8

  9. Protocols  Definition  A protocol is a convention or standard that controls or enables the connection, communication, and data transfer between two computing endpoints. 08-11-26 Simulation Engines 2008, Markus Larsson 9

  10. Protocols A protocol typically defines the following   Detection of the underlying physical connection (wired or wireless), or the existence of the other endpoint or node  Handshaking  Negotiation of various connection characteristics  How to start and end a message  How to format a message  What to do with corrupted or improperly formatted messages (error correction)  How to detect unexpected loss of the connection, and what to do next  Termination of the session or connection 08-11-26 Simulation Engines 2008, Markus Larsson 10

  11. Protocol families  Of the protocol families listed here, we are mostly interested in the last one, Internet protocol suite 08-11-26 Simulation Engines 2008, Markus Larsson 11

  12. Socket programming  The standard way of doing Internet programming is to make use of a network socket library  Berkeley sockets originated with the 4.2BSD system in 1983  The Windows implementation of the BSD Socket API is called WinSock and includes a number of extensions specific to network sockets on Windows  Definition of Socket  A socket can be used in computer networking to form one end of a bi-directional communication link between two programs. 08-11-26 Simulation Engines 2008, Markus Larsson 12

  13. Socket programming  The following header files are involved in C programming with BSD sockets under UNIX (similar on Windows)  sys/socket.h  Definitions for the most basic of socket structures  sys/types.h  Basic data types associated with structures within the API  netinet/in.h  Definitions for socketaddr in and other base data structures  sys/un.h  Definitions and data type declarations for SOC UNIX streams  sys/select.h  Definitions for the use of the select family of functions 08-11-26 Simulation Engines 2008, Markus Larsson 13

  14. Socket programming  A socket is an endpoint in a two-way communication link between two parties.  An Internet (TCP/IP) socket is (explicitly or implicitly) bound to a specific address (hostname and portnumber) and can be connected to another socket with another address  Potentially on another computer 08-11-26 Simulation Engines 2008, Markus Larsson 14

  15. Internet adress Internet addresses are   32-bit numbers, usually represented as four bytes on the form xxx.yyy.zzz.www  They are also identified by a 16-bit port number Normal connection sockets do not care about the exact address, but  a server usually binds a specific server socket to a pre-defined address  Such a server socket listens for inbound connections and then creates a new socket for the actual client-server communication Only one socket can be bound to a specific address at any time   Port numbers below 2000 are ordinarily reserved  Port numbers below 1024 need Root access to bind HTTP is port 80, FTP is port 21, Telnet is port 23, etc...  08-11-26 Simulation Engines 2008, Markus Larsson 15

  16. Socket tutorial  A brief overview 08-11-26 Simulation Engines 2008, Markus Larsson 16

  17. Socket tutorial: Server code int sockfd, newsockfd, portno, clilen, n; struct sockaddr_in serv_addr, cli_addr; char buffer[256]; sockfd = socket(AF_INET, SOCK_STREAM, 0); // (1) bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(port_number); serv_addr.sin_addr.s_addr = INADDR_ANY; bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); // (2) listen(sockfd, 5); // (3) clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); // (4) bzero(buffer, 256); n = read(newsockfd, buffer, 255); // (5) printf("Message: %s\n", buffer); 08-11-26 Simulation Engines 2008, Markus Larsson 17

  18. Socket tutorial: Client code int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server; sockfd = socket(AF_INET, SOCK_STREAM, 0); // (1) server = gethostbyname(server_name); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(port_number); connect(sockfd, &serv_addr, sizeof(serv_addr)); // (2) fgets(buffer, 255, stdin); write(sockfd, buffer, strlen(buffer)); // (3) 08-11-26 Simulation Engines 2008, Markus Larsson 18

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend