Transcript TCP Socket

Networking
• OSI (Open Systems Interconnection) model of computer
networking, seven layers (the Application, Presentation,
Session, Transport, Network, Data Link, and Physical
Layers)
• Internet Protocol Stack, five layers (the Application,
Transport, Network, Data Link, and Physical Layers)
application
process
socket
application
process
transport
transport
network
network
link
physical
Internet
link
physical
controlled by
app developer
controlled
by OS
Networking
• TCP/IP (Transmission Control Protocol/Internet Protocol)
– reliable, byte stream-oriented (reliable transfer of bytes from one
process to another)
• UDP/IP (User Datagram Protocol)
– unreliable datagram
• Connection model: connection-oriented and connectionless
communication
Socket : a host-local, application-created, OS-controlled interface
into which, application process can both send and receive messages
to/from another application process
Socket programming with TCP
client must contact server
• server process must first be
running
• server must have created
socket that welcomes
client’s contact
client contacts server by:
• Creating TCP socket,
specifying IP address, port
number of server process
• when client creates socket:
client TCP establishes
connection to server TCP
• when contacted by client,
server TCP creates new
socket for server process to
communicate with that
particular client
– allows server to talk with
multiple clients
– source port numbers used
to distinguish clients
application viewpoint:
TCP provides reliable, in-order
byte-stream transfer (“pipe”)
between client and server
TCP Socket Communications
Client
Server
Listener
Socket
(Thread)
Connect
Client
Socket
(Thread)
Accept
Communicate
Server
Socket 1
(Thread)
Server
Socket 2
(Thread)
Server
Socket i
(Thread)
TCP Sockets in C++/CLI
Client
Server
•
•
•
•
•
TcpListener ^listener = gcnew
TcpListener(IPAddress::Any, 12345);
listener->Start();
Socket connection = listener>AcceptSocket();
NetworkStream ^socketStream =
gcnew NetworkStream( connection );
BinaryWriter ^writer = gcnew
BinaryWriter( socketStream );
BinaryReader ^reader = gcnew
BinaryReader( socketStream );
reader->ReadString() and writer>Write();
writer->Close(); reader->Close();
socketStream->Close(); connection>Close();
•
•
•
•
•
TcpClient ^client = gcnew
TcpClient(); client->Connect(
L"localhost", 12345 )
NetworkStream ^clientStream =
gcnew NetworkStream( client );
BinaryWriter ^writer = gcnew
BinaryWriter( clientStream );
BinaryReader ^reader = gcnew
BinaryReader( clientStream );
reader->ReadString() and writer>Write();
writer->Close(); reader->Close();
clientStream->Close(); client>Close();
Client/server socket interaction: TCP
Server (running on hostid)
Client
create listener socket,
port=x, for
incoming request:
TcpListener ^listener = gcnew
TcpListener(IPAddress::Any, x);
listener->Start();
wait for incoming
TCP
connection request
connection setup
Socket connection =
listener->AcceptSocket();
read request from socket
connection
write reply to socket
connection
Close socket
connection
create socket,
connect to hostid, port=x
TcpClient ^client = gcnew TcpClient();
client->Connect(hostid, x);
send request using
Socket client
read reply from
socket client
Close socket
client
An Example