TCP是Transmission Control Protocol(传输控制协议)的简称,是TCP/IP体系中面向连接的运输层协议,在网络中提供全双工的和可靠的服务。
TCP协议最主要的特点是:
1) 是一种基于连接的协议。
2) 保证数据准确到达。
3) 保证各数据到达的顺序与数据发出的顺序相同。
4) 传输的数据无消息边界。
TCP协议通信流程:
1. 服务器端首先创建服务器套接字
2. 服务器套接字监听一个端口,等待客户端请求
3. 客户端创建客户端套接字
4. 客户端向服务器端发送连接请求
5. 服务器确认与客户端的连接
6. 客户端和服务器端利用建立的连接进行通信
7. 通信完毕后,客户端和服务器关闭各自的连接
服务器和客户端利用 Socket 进行通信的流程(如图 所示)
服务器与客户端的通信流程
Socket编程基础:
Socket(网络套接字)是网络通信的基本构件,它是可以被命名和寻址的通信端口,使用中,每个Socket 都有对应的类型和一个与之相关的进程。下面分别介绍如何利用Socket 建立服务器端程序和客户端程序。
利用Socket 建立TCP服务器端程序,一般需要以下几个步骤。
1) 创建服务器套接字,并将其与服务器的IP地址和端口号绑定
int port = 888;
IPAddress ipAdd=IPAddress.Parse(“192.168.1.100”);
TcpListener listener=new TcpListener(ipAdd, port);
注意,需要引入命名空间:
using System.Net;
using System.Net.Sockets;
2) 监听服务器端口,等待客户端连接请求
listener.Start();
3) 确认与客户端的连接,并创建与该客户端对应的Socket对象
Socket clientSocket= listener.AcceptSocket();
4) 通过建立的Socket对象与连接的客户端进行数据传输
A. 向客户端发送消息
string msg=”大家好”;
byte [] outBytes=Encoding.Default.GetBytes(msg.ToCharArray());
clientSocket.Send(outBytes);
B. 接收从客户端发来的数据
byte [] buff=new byte[1024];
clientSocket.Receive(buff);
string msg = Encoding.Default.GetString(buff);
5) 断开与客户端的连接
clientSocket.Close();
6) 关闭服务器套接字
listener.Close();
利用Socket 建立TCP客户端程序,一般需要以下几个步骤。
1) 创建客户端套接字
TcpClient tcpClient=new TcpClient();
注意,需要引入命名空间:
using System.Net;
using System.Net.Sockets;
2) 向远程服务器发送连接请求
int port = 888;
IPAddress ipAdd=IPAddress.Parse(“192.168.1.100”);
tcpClient.Connect(ipAdd, port);
3) 获取与服务器通信的流通道
NetworkStream stream = tcpClient.GetStream();
4) 通过流通道与服务器端进行数据传输
A..向服务器端发送数据
string cmd=” CHAT|” + userAlias + “:Hello, everyone|”;
byte [] outBytes=Encoding.Default.GetBytes(cmd.ToCharArray());
Stream.Write(outBytes,0,outBytes.Length);
B.接收从服务器端发来的数据
byte [] buff=new byte[1024];
int len= stream.Read(buff,0,buff.Length);
string msg = Encoding.Default.GetString(buff,0,len);
5) 断开与服务器的连接
tcpClient.Close();
TCP编程应用实例——网络即时通讯程序
功能:
登录、显示在线用户、显示进行聊天的用户信息、群聊(发送的信息所有在线用户都会收到)、私聊(与选定用户聊天,发送信息只有选定的用户可以收到)
设计方案:
1. 服务器端的设计
服务器端管理聊天任务,并维持在线用户列表,转发用户发送来的信息,我们设计的功能如下:
1) 监听本机IP 地址中的指定端口
2) 当有客户端向该端口发出请求时,服务器程序立即建立一个与该客户端的连接并启动一个新的线程来处理该客户端的所有请求
3) 根据客户端发来的不同请求命令,执行相应的操作,并将处理结果返回给该客户端。服务器可以接收识别4种消息命令:CONN(建立新的连接)、CHAT(聊天)、PRIV(私聊)和EXIT(离开),每条消息命令可以包含一个或多个消息参数,用管道符“|”来分隔消息的各部分。表-1列出了所有的消息命令。