Upload
angelina-farmer
View
220
Download
0
Tags:
Embed Size (px)
Citation preview
Fall 2010 2
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.
Fall 2010Spring 2005 3
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.
Fall 2010 4
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.
Fall 2010 5
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.
Fall 2010 6
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, orthe Object Orientated MFC version.
Fall 2010 7
Learning Objectives
Creating a socket (and VC setup)Making the connectionSending and receiving dataMultiple host connection [Optional multi-thread implementation]
Integrating with game loop
Fall 2010 8
redKlyde (Tutorial #1)
VC setting: add WS2_32.lib to projectWSAData: hold info about our network capabilityWSAStartup (…): 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 occurredWSAGetLastError() to get the errorcode [see msdn for details]
WSACleanup(): last call of winsock
Fall 2010 9
Tutorial 1Winsock v2.2
AF_INET: Socket for internet
SOCK_STREAM: TCP socket[SOCK_DGRAM: UDP socket]
Fall 2010 10
redKlyde (Toot #2 – Server)
Host/net byte ordering of numbers (next page)Bind: associate a port to socket to send/receive dataSocket 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()
Fall 2010 11
[Endianness]
Big endianNetwork protocolhton, ntoh Host-network
conversion
Little endianWindows
Fall 2010
hton & ntoh
12
Sizeof (short) = 4 bytesSizeof (long) = 8 bytes
htons (7654) = 58909htonl (7654) = 3860660224
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…
Fall 2010 15
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)
Fall 2010 17
redKlyde (Toot#3)
Send/recv fixed length messageMacros for earlier commandsNbytes = recv (clientsock, buffer,buffersize,0)Nbytes = send (clientsock,buffer,size,0);
Fall 2010 20
redKlyde (Toot#4)
How about variable length message?TCP concatenates all packets into one big chunkUse 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.
Fall 2010
Tut5: Overview
Thread: a sequence of instructions that may execute in parallel with other threadsMulti-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
Fall 2010 24
redKlyde (Toot#5 – server)
Blocking calls: accept, recvNonblocking 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 readException 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
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
Fall 2010 31
Command Summary
WSAStartup; WSACleanupWSAGetLastError(); socket(); closesocket(); bind(); listen(); accept(); gethostbyname(), connect() ntohl(), ntohs(), htonl(), htons() send(), recv() select() FD_SET, FD_ZERO, FD_CLR, FD_ISSET