转载请标明出处~~
以下为Socket服务端关键代码,已测试OK
Thread serverThread;
Thread clientThread;
TcpListener serverTcp;
TcpClient clientTcp;
#region Socket读取数据
private void ServerStart()
{
//创建IPEndPoint实例
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 6001);
/*
//创建一个套接字
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将所创建的套接字与IPEndPoint绑定
serverSocket.Bind(ipep);
//设置套接字为收听模式
serverSocket.Listen(10);
*/
serverTcp = new TcpListener(ipep);
serverTcp.Start();
while (true)
{
try
{
//在套接字上接收接入的连接
while (!serverTcp.Pending())
{
Thread.Sleep(1000);
}
//clientSocket = serverSocket.Accept();
clientTcp = serverTcp.AcceptTcpClient();
//clientThread = new Thread(new ThreadStart(ReceiveData));
//clientThread.Start();
ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveData), clientTcp);
}
catch (Exception ex)
{
MessageBox.Show("listening Error: " + ex.Message);
}
}
}
private void ReceiveData(object state)
{
bool keepalive = true;
TcpClient curClientTcp = state as TcpClient;
//TcpClient s = curClientTcp;
//NetworkStream ns = s.GetStream();
//StreamReader sr = new StreamReader(ns);
//StreamWriter sw = new StreamWriter(ns);
//Byte[] buffer = new Byte[1024];
//根据收听到的客户端套接字向客户端发送信息
IPEndPoint clientep = (IPEndPoint)curClientTcp.Client.RemoteEndPoint;
//lstServer.Items.Add("Client:" + clientep.Address + "(" + clientep.Port + ")");
string data = "";
string clientNo = clientep.Address + "," + clientep.Port;
ClientSockets cs = null;
if (!CommonInfo.DicClientSocket.TryGetValue(clientNo, out cs))
{
cs = new ClientSockets();
cs.ServerIP = clientep.Address.ToString();
cs.ServerPort = clientep.Port;
cs.ClientTcp = state as TcpClient;
cs.Ns = cs.ClientTcp.GetStream();
cs.Sr = new StreamReader(cs.Ns);
cs.Sw = new StreamWriter(cs.Ns);
cs.IfConnect = true;
csList.Add(cs);
//lock (locker)//锁
//{
// /*添加过程*/
// CommonInfo.DicClientSocket.Add(clientNo, cs);
//}
}
while (keepalive)
{
//在套接字上接收客户端发送的信息
try
{
data = cs.Sr.ReadLine();
if (data == "")
continue;
}
catch (Exception ex)
{
//终止该线程
cs.CloseSocket();
return;
}
//根据信息向客户端发送数据
if (data == null)
return;
}
}
#endregion
转载请标明出处