一,Socket的定义
Socket就相当与网络通讯的一种媒介,通过它能够在两者之间各生成两个接口,通过TCP/IP传输层协议建立一个通道进行数据的传送。
二,Socket编程的一般流程
客户端:
1、创建一个负责通讯的Socket。
2、通过Connect连接服务器。
3、通过Send向服务器发送消息。
4、通过Receive接收服务器发来的消息。
5、通过Clase关闭Socket通道释放资源。
服务端:
1、创建一个负责监听的Socket。
2、通过Bind绑定服务器的IP地址。
3、通过Listen设置最大监听数量。
4、通过Accept创建一个与客户端通讯的Socket。
5、通过Receive接收并处理客户端发来的消息。
6、通过Send将处理好的数据发送个客户端。
7、通过Clase关闭Socket通道释放资源。
三、案例分析:
客户端代码
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace c_ClientSocket
{
internal class Program
{
static Socket cliSocket;
static void Main(string[] args)
{
//创建负责通讯Socket
cliSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint Point =new IPEndPoint(ip, 55555);
cliSocket.Connect(Point);
Console.WriteLine("服务器连接成功");
SendMessage();
}
private static void ReceiveMessage()//接收服务端发送的数据
{
byte[] buffer = new byte[1024];//数据缓冲区
int count = cliSocket.Receive(buffer);//接收消息
if(count > 0)
{
string str = Encoding.UTF8.GetString(buffer, 0,count);
Console.WriteLine("服务端:" + str);
cliSocket.Close();
}
}
private static void SendMessage()//向服务端发送数据
{
byte[] buffer = new byte[1024];//数据缓冲区
buffer = Encoding.UTF8.GetBytes("你好");
cliSocket.Send(buffer);//发送消息
ReceiveMessage();
}
}
}
服务器代码
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace c_ServerSocket
{
internal class Program
{
static Socket serSocket;
static void Main(string[] args)
{
//创建负责监听Socket
serSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint Point = new IPEndPoint(ip, 55555);
serSocket.Bind(Point);//绑定IP地址端口号
serSocket.Listen(10);//设置最大监听数量
Console.WriteLine("服务器创建成功");
ReceiveMessage();
}
private static void ReceiveMessage()//接收客户端发送消息
{
Socket s = serSocket.Accept();//创建与客户端进行通讯的socket
byte[] buffer = new byte[1024];//数据缓冲区
int count = s.Receive(buffer);//接收数据
if(count > 0)
{
string str = Encoding.UTF8.GetString(buffer);
Console.WriteLine("客户端:" + str);
SendMessage(s);
}
}
private static void SendMessage(Socket socket)//向客户端发送消息
{
socket.Send(Encoding.UTF8.GetBytes("你好"));//发送数据
socket.Close();
serSocket.Close();//通讯结束清空socket释放内存
}
}
}