9、 下面我们来测试此线程是否工作。
在SocketServerTest的Form1的Form1_Load事件中加入如下代码。
SocketLibrary.SocketFactory factory = new SocketLibrary.SocketFactory();
factory.StartServer(1979);
运行程序,可以看出Form1显示出来了。但我们并没有看到监听启动。这是由于我们的监听是在另外一个线程里运行的。我们可以在Server类的Start()函数中加入断点。再次执行程序。可以看到程序会运行到断点处。即开始监听网络连接了。
10、 下面我们另外启动一个VS.NET实例,建立一个项目SocketClientTest,并通过添加已存在的项目增加SocketLibrary,增加对此项目的引用。
11、 新建一个Client类。并写上以下源代码:
using System;
using System.net;
using System.Net.Sockets;
namespace SocketLibrary

...{
public class Client

...{
public const int CONNECTTIMEOUT = 10;
public Connection _connection;

public Client()...{}

public static Connection StartClient(IPAddress ipaddress,int port) ...{
TcpClient client = new TcpClient();
client.SendTimeout = CONNECTTIMEOUT;
client.ReceiveTimeout = CONNECTTIMEOUT;
client.Connect(ipaddress,port);
}
}
}
//在SocketFactory中加入StartClient函数
public Connection StartClient(IPAddress ip,int port)

...{
return Client.StartClient(ip,port);
}
在SocketClient的Form1的Form1_Load中加入以下代码并插入断点。开始调试执行。当执行取最后一句时。我们看到_connection已经连接成功。好了,现在我们的客户端已经连接上服务器,并可以发送消息了。但现在我们还没有如何发送消息的方法。我们在SocketFactory中增加一个发消息的静态方法。并且声明一个编码类型的静态变量:
public static System.Text.Encoding DefaultEncoding =
System.Text.Encoding.GetEncoding("GB2312");
public static void SendMessage(string message,Connection connection) {
byte[] buffer = DefaultEncoding.GetBytes(message);
connection.NetworkStream.Write(buffer,0,buffer.Length);
}
我们还没有在服务器端侦听消息。在Server类中增加如下代码加入开始侦听网络流的线程:
public void Listenning() {
while(true) {
System.Threading.Thread.Sleep(200);
foreach(Connection connection in this._connections) {
if(connection.NetworkStream.CanRead &&
connection.NetworkStream.DataAvailable) {
byte[] buffer = new byte[1024];
int count = connection.NetworkStream.Read(buffer,0,buffer.Length);
Console.Write(SocketFactory.DefaultEncoding.GetString(buffer,0,count));
}
}
}
}
public void StartListen() {
_listenningthread = new System.Threading.Thread
(new System.Threading.ThreadStart(Listenning));
_listenningthread.Start();
}
private System.Threading.Thread _listenningthread;
我们再启动SocketServerTest。并运行SocketClientTest。成功!