前言
在传输层使用的传输协议是TCP和UDP协议。那么在编程的实现过程中就需要使用Socket来实现所谓的数据传输。
TCP:传输控制协议/因特网互联协议,又叫网络通讯协议。
简单解释就是TCP控制传输数据,负责发送传输的问题,一旦有问题就发出信号要求重新传输,直到所有数据安全正确地传输到目的地,而IP是负责给因特网中每台PC定义一个地址,便于标记后传输的。
网络通信中的Socket
在网络通信中实现Socket得需要两个端口,客户端和服务端。在服务端实时接收等待客户端的连接,二者连接成功后可双向发送数据。
服务端:
主要运行监听程序,用于时刻监听是否有客户端来连接服务端的IP地址和端口,若是有连接成功的,则可以进行数据的传输,此传输为双向传输。
客户端:
客户端程序用于连接服务端程序,服务端会暴露出服务的IP地址和端口,客户端通过IP地址和端口号,即可连接到服务端,连接成功后,二者可进行双向的数据传输。
Demo
服务器端
int port = 2000;
string host = "172.16.1.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sSocket.Bind(ipe);
sSocket.Listen(0);
Console.WriteLine("监听已经打开,请等待");
//receive message
Socket serverSocket = sSocket.Accept();
Console.WriteLine("连接已经建立");
string recStr = "";
byte[] recByte = new byte[4096];
int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
recStr += Encoding.ASCII.GetString(recByte, 0, bytes);
//send message
Console.WriteLine("服务器端获得信息:{0}", recStr);
string sendStr = "send to client :hello";
byte[] sendByte = Encoding.ASCII.GetBytes(sendStr);
serverSocket.Send(sendByte, sendByte.Length, 0);
serverSocket.Close();
sSocket.Close();
客户端
//服务器端ip地址和端口
int port = 2000;
string host = "172.16.1.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipe);
//send message
string sendStr = "发送数据 : hello,我是阿辉";
byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr);
clientSocket.Send(sendBytes);
//receive message
string recStr = "";
byte[] recBytes = new byte[4096];
int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
recStr += Encoding.ASCII.GetString(recBytes, 0, bytes);
Console.WriteLine(recStr);
clientSocket.Close();
这里只是简单的介绍在一般情况下服务端和客户端进行数据通信的方法,是一种同步通信下建立的连接,在日常工作中,我们很容易出现多次连接传输的情况,那么此时就需要使用异步的方式进行连接和接收数据。后面文章将介绍如何使用异步方式在客户端和服务器端进行数据传输。
寄语
人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。
原创不易,给个关注。
我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。