版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15020543/article/details/83998624
上篇我提到Socket是TCP/IP的抽象接口。所以我们直接使用就好,没必要知其甚解。
1.打开VS 新建项目
名称,位置随意
这里名称是Server
框架选.NET 4.5(在这篇博客里也无所谓)
注意引用
using System.Net;
using System.Net.Sockets;
这两个命名空间
using System;
using System.Net;
using System.Net.Sockets;
namespace Server
{
class Program
{
static void Main(string[] args)
{
}
}
}
2. 在Main函数外部声明一个Server,并编写一个StartServer函数,用于开启服务器
/// <summary>
/// 开启一个服务器
/// </summary>
static void StartServer()
{
}
在StartServer函数里做初始化操作
//实例化一个Socket
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
里面这些构造参数是什么意思呢?
选中Socket按F12来一探究竟
接着回到StartServer,然后设置IP,由于我们做测试,这里面的IP填的是我们电脑内网IP。放在服务器上的话就填服务器公网IP
//设置IP
IPAddress ipAdress = IPAddress.Parse("127.0.0.1");
然后设置端口,这里选定为88,同样的,放在服务器上要设置为服务器端口
然后设置网络终结点(包含IP和端口)
//设置网络终结点
IPEndPoint iPEndPoint = new IPEndPoint(ipAdress, 88);
然后绑定IP和端口号
//绑定ip和端口号
serverSocket.Bind(iPEndPoint);
最后设置监听队列长度,什么意思呢?就是等待连接的客户端数,如果设为0,就是不等待,来几个连几个。如果设为非零数。。。我也不知道会咋样(旁白:???)至此StartServer函数编写结束
//等待队列(开始监听端口号)
serverSocket.Listen(0);
服务端代码
using System;
using System.Net;
using System.Net.Sockets;
namespace Server
{
class Program
{
static Socket serverSocket;
static void Main(string[] args)
{
StartServer();
}
/// <summary>
/// 开启一个Socket
/// </summary>
static void StartServer()
{
//实例化一个Socket
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//设置IP
IPAddress ipAdress = IPAddress.Parse("127.0.0.1");
//设置网络终结点
IPEndPoint iPEndPoint = new IPEndPoint(ipAdress, 88);
//绑定ip和端口号
serverSocket.Bind(iPEndPoint);
//等待队列(开始监听端口号)
serverSocket.Listen(0);
}
}
}
3.然后是客户端,和服务端大同小异,注意IP这里写的是内网IP,也就是服务器端所绑定的IP。如果放到服务器上,还是要写公网IP
可以了解一下Connect函数
using System;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace ClientTest
{
class Program
{
//声明客户端
static Socket clientSocket;
static void Main(string[] args)
{
StartClient();
}
/// <summary>
/// 开启客户端并连接到服务器端
/// </summary>
static void StartClient()
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 88));
}
}