Socket serverSocket = null ;
Thread clientThread = null ;
Socket clientSocket = null ;
Thread thread = null ;
IPAddress ips = null ;
PEndPoint ipep = null ;
void ServerStart()
{
ips = Dns.GetHostAddresses(Dns.GetHostName())[0];
//創建IPEndPoint實例
ipep = new IPEndPoint(ips, 9050);
//創建一個套接字
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true );
//將所創建的套接字與IPEndPoint綁定
serverSocket.Bind(ipep);
//設置套接字爲收聽模式
serverSocket.Listen(20);
while (listenalive)
{
try
{
//在套接字上接收接入的連接
clientSocket = serverSocket.Accept();
clientThread = new Thread( new ParameterizedThreadStart(ReceiveData));
clientThread.Start(clientSocket);
}
catch (Exception ex)
{
WriteErrorLog(ex.Message);
serverSocket.Close();
serverSocket = null ;
}
}
}
static void ReceiveData( object obj)
{
bool keepalive = true ;
Socket s = obj as Socket;
Byte[] buffer = new Byte[1024];
//根據收聽到的客戶端套接字向客戶端發送信息
IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;
Console.WriteLine( "客戶端ip:" + clientep.Address + " 端口:" + clientep.Port);
string welcome = "連接服務器成功" ;
buffer = System.Text.Encoding.Unicode.GetBytes(welcome);
//向客戶端發送“連接服務器成功”消息
s.Send(buffer, buffer.Length, SocketFlags.None);
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 += System.Text.Encoding.Unicode.GetString(buffer, 0, bufLen);
}
catch (Exception ex)
{
break ; ;
}
}
Send(s, content);
s = null ;
buffer = null ;
clientep = null ;
Thread.CurrentThread.Abort();
}
|