服务器端代码:
/// <summary>
/// 创建套接字开始监听端口
/// </summary>
private void StartListen()
{
//获取本地IP地址
IPAddress ipAddress = Dns.GetHostAddresses(Dns.GetHostName())[0];
//创建IPEndPoint实例
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 9000);
//创建套接字
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//设置套接字选项
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//绑定IP地址和端口
serverSocket.Bind(ipEndPoint);
//设置最大接受连接书
serverSocket.Listen(20);
while (true)
{
try
{
Socket clientSocket = serverSocket.Accept();//在套接字上接收接入的连接
Thread clientThread = new Thread(new ParameterizedThreadStart(ReceiveData));
clientThread.IsBackground = true;//当主窗体关闭的时候此线程随之结束
clientThread.Start(clientSocket);
}
catch (Exception ex)
{
serverSocket.Close();
serverSocket = null;
}
}
}
/// <summary>
/// 接收到客户端发来的消息时处理的方法
/// </summary>
/// <param name="obj"></param>
private static void ReceiveData(object obj)
{
Socket s = obj as Socket;
Byte[] buffer = new Byte[1024];
//根据收听到的客户端套接字向客户端发送信息
IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;
Console.WriteLine("客户端ip:" + clientep.Address + " 端口:" + clientep.Port);
buffer = new Byte[1024];
int bufLen = 0;
string content = string.Empty;
while (true)
{
//在套接字上接收客户端发送的信息
bufLen = 0;
try
{
bufLen = s.Receive(buffer);
if (bufLen == 0)
{
break;
}
content += Encoding.Unicode.GetString(buffer, 0, bufLen);
Console.WriteLine(content);
}
catch (Exception ex)
{
break; ;
}
}
s = null;
buffer = null;
clientep = null;
Thread.CurrentThread.Abort();
}