这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解。
第一步:创建解决方案
第二步:创建服务端程序
这里可以选择“Console Application”这个类型,比较方便调试 然后编写如下代码,实现服务器的基本功能
using System;
using System.Collections.Generic; using System.Linq; using System.Text;
//额外导入的两个命名空间 using System.Net.Sockets; using System.Net;
namespace SocketServer {
class Program {
///
/// Socket Server 演示 /// 作者:陈希章 ///
///
//创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将该socket绑定到主机上面的某个端口 //方法参考:
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.bind.aspx
socket.Bind(new IPEndPoint(IPAddress.Any, 4530));
//启动监听,并且设置一个最大的队列长度 //方法参考:
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.listen(v=VS.100).aspx
socket.Listen(4);
Console.WriteLine(\ Console.Read(); } } }
现在可以启动调试一下看看效果如何,正常情况下应该会看到一个提示,因为我们需要在TCP 4530端口进行监听,所以防火墙会有提示。
点击“Allow access”
这样,我们的服务器就可以开始监听了。但是这有什么用呢?是的,没有什么用。 我们还需要为服务器添加一些功能,例如接受传入的请求,给客户端发送消息,或者从客户端接收消息等等
第三步:接受传入的请求
我们需要通过Accept,或者(BeginAccept)来接受传入的请求,请注意下面代码中的红色部分
using System;
using System.Collections.Generic; using System.Linq; using System.Text;
//额外导入的两个命名空间 using System.Net.Sockets; using System.Net;
namespace SocketServer {
class Program {
///
/// Socket Server 演示 /// 作者:陈希章 ///
///
//创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将该socket绑定到主机上面的某个端口 //方法参考:
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.bind.aspx
socket.Bind(new IPEndPoint(IPAddress.Any, 4530));
//启动监听,并且设置一个最大的队列长度 //方法参考:
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.listen(v=VS.100).aspx socket.Listen(4);
//开始接受客户端连接请求
//方法参考:
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.beginaccept.aspx
socket.BeginAccept(new AsyncCallback((ar) => {
//这就是客户端的Socket实例,我们后续可以将其保存起来 var client = socket.EndAccept(ar);
//给客户端发送一个欢迎消息
client.Send(Encoding.Unicode.GetBytes(\I accept you request at \+DateTime.Now.ToString())); }), null);
Console.WriteLine(\); Console.Read(); } } }
wow,看起来不错对吧,我们赶紧做一个客户端来测试一下吧
第四步:创建客户端
我们还是使用一个Console Application 添加如下的代码,并且创建客户端连接
using System;
using System.Collections.Generic; using System.Linq; using System.Text;
//导入的命名空间
using System.Net.Sockets;
namespace SocketClient {
class Program {
///
/// Socket Server 演示