Presentation is loading. Please wait.

Presentation is loading. Please wait.

Socket Programming References: redKlyde ’ s tutorial set Winsock2 for games (gamedev.net)

Similar presentations


Presentation on theme: "Socket Programming References: redKlyde ’ s tutorial set Winsock2 for games (gamedev.net)"— Presentation transcript:

1 Socket Programming References: redKlyde ’ s tutorial set Winsock2 for games (gamedev.net)

2 Fall 20102 Introduction (javadoc) TCP provides a reliable, point-to-point communication channel that client-server applications on the Internet use to communicate with each other. To communicate over TCP, a client program and a server program establish a connection to one another. Each program binds a socket to its end of the connection. To communicate, the client and the server each reads from and writes to the socket bound to the connection.

3 Fall 2010Spring 20053 Client/Server Normally, a server runs on a specific computer and has a socket that is bound to a specific port number. The server just waits, listening to the socket for a client to make a connection request. The client knows the hostname of the machine on which the server is running and the port number to which the server is connected. To make a connection request, the client tries to rendezvous with the server on the server's machine and port.

4 Fall 20104 Client/Server (cont) If everything goes well, the server accepts the connection. On the client side, if the connection is accepted, a socket is successfully created and the client can use the socket to communicate with the server. The client and server can now communicate by writing to or reading from their sockets.

5 Fall 20105 Socket Definition A socket is one endpoint of a two-way communication link between two programs running on the network. A socket is bound to a port number so that the TCP layer can identify the application that data is destined to be sent.

6 Fall 20106 Winsock 2.2 There are different ways to program with WinSock. the very basic UNIX/Berkeley type functions, the Microsoft’s Windows specialized version of the basic functions, or the Object Orientated MFC version.

7 Fall 20107 Learning Objectives Creating a socket (and VC setup) Making the connection Sending and receiving data Multiple host connection [Optional multi-thread implementation] Integrating with game loop

8 Fall 20108 redKlyde (Tutorial #1) VC setting: add WS2_32.lib to project WSAData: hold info about our network capability WSAStartup ( … ): start up winsock mysock = socket (AF_INET, SOCK_STREAM,0); creates a TCP socket for Internet; fails if too many sockets are created closesocket (mysock); Every winsock function will return SOCKET_ERROR if error occurred WSAGetLastError() to get the errorcode [see msdn for details] WSACleanup(): last call of winsock

9 Fall 20109 Tutorial 1 Winsock v2.2 AF_INET: Socket for internet SOCK_STREAM: TCP socket [SOCK_DGRAM: UDP socket]

10 Fall 201010 redKlyde (Toot #2 – Server) Host/net byte ordering of numbers (next page) Bind: associate a port to socket to send/receive data Socket address structure [sockaddr_in]: port no., Internet protocol, … Port no: stay above 2024 Listen (listensock, backlog) Clientsocket = accept (listensock, 0,0) A blocking call [use debugger to verify] Backlog: the number of clients you can keep waiting before calling accept()

11 Fall 201011 [Endianness] Big endian Network protocol hton, ntoh Host-network conversion Little endian Windows

12 Fall 2010 hton & ntoh 12 Sizeof (short) = 4 bytes Sizeof (long) = 8 bytes htons (7654) = 58909 htonl (7654) = 3860660224

13 Fall 2010 In fact: If the sending and receiving ends are of the same endianness, there is no need to convert 1D E6 1D E6 7654 However, if not so, only through ntoh/hton can guarantee the correctness of the info…

14 Fall 2010Spring 200514 Bind the socket to port 7654

15 Fall 201015 redKlyde (Toot#2 – client) Which server to connect to? “ host entry ” structure: gethostbyname (servername) Socket address [sockaddr_in]: port, host_addr Connect (sock, sockaddr_in, size)

16 Fall 201016 Tut 2(c) Or IP “140.129.25.194”

17 Fall 201017 redKlyde (Toot#3) Send/recv fixed length message Macros for earlier commands Nbytes = recv (clientsock, buffer,buffersize,0) Nbytes = send (clientsock,buffer,size,0);

18 Fall 2010Spring 200518 Tut3 (server)

19 Fall 201019 Tut3 (client)

20 Fall 201020 redKlyde (Toot#4) How about variable length message? TCP concatenates all packets into one big chunk Use escape character to decipher … Send the size of message first, then recv accordingly !? Why the size won ’ t be mixed with the coming messages?! This is the simple protocol we set for this example.

21 Fall 201021 Tut4 (server)

22 Fall 201022 Tut4 (client)

23 Fall 2010 Tut5: Overview Thread: a sequence of instructions that may execute in parallel with other threads Multi-threaded AP Accept thread: accept clients connecting to the server socket; add client socket to masterset Main thread: polling from selected sets to process variable-length input Shared memory: FD_SET (set of client sockets) 23

24 Fall 201024 redKlyde (Toot#5 – server) Blocking calls: accept, recv Nonblocking calls: send, connect, … FD_SET (file descriptor set): a list of sockets Data member: fd_count, fd_array Macros for FD_SET: FD_SET (sock, &set) FD_ZERO (&set) FD_CLR (sock,&set) FD_ISSET(sock,&set) Select: create a list of sockets that already have data to read Exception handling: Clean disconnect: the client closes the socket and exits [no error] dropped connection [an error will occur] Remove from FD_SET, close the corresponding socket

25 Fall 2010 Setting Up 25 Mutex: mutual exclusion algorithms used in concurrent programming to avoid the simultaneous use of a common resource Code-generation: debug multi-threaded

26 Fall 201026 Accepting thread

27 Fall 2010 Main Thread 1 Spring 200527

28 Fall 201028 Main Thread 2 Error check…

29 Fall 2010 Error (dropped connection) 29

30 Fall 2010 Error (clean disconnect) 30 Client called closesocket

31 Fall 201031 Command Summary WSAStartup; WSACleanup WSAGetLastError(); socket(); closesocket(); bind(); listen(); accept(); gethostbyname(), connect() ntohl(), ntohs(), htonl(), htons() send(), recv() select() FD_SET, FD_ZERO, FD_CLR, FD_ISSET

32 Networking for Game Programmers Reference: Glenn Fieldler’s BlogGlenn Fieldler’s Blog Fall 201032

33 Topics TCP vs. UDP Sending & Receiving Packets (UDP) UDP (Virtual) Connection UDP flow control Fall 201033


Download ppt "Socket Programming References: redKlyde ’ s tutorial set Winsock2 for games (gamedev.net)"

Similar presentations


Ads by Google