此类还有不足的地方.请大家多意见便于改正!! 做好的类库在些下载: CSockets.rar
SocketStart.cs 的代码:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections;
namespace CSockets
{
public delegate void getClientID(object sender, ClientID e);
public class SocketStart
{
public event getClientID mOnConnected = null;
public ArrayList ClinetList = ArrayList.Synchronized(new ArrayList());
public AsyncCallback ClientCallBack;
public Socket MaiSocket;
public int ClientNum = 0;
public void Start() //启动服务
{
try
{
MaiSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint LocIP = new IPEndPoint(IPAddress.Any, 1680);
MaiSocket.Bind(LocIP);
MaiSocket.Listen(100);
MaiSocket.BeginAccept(new AsyncCallback(ClinetConnection), null);
}
catch (Exception E)
{
}
}
private void ClinetConnection(IAsyncResult asyn) //实现多客户连接
{
try
{
Socket ClientSocket = MaiSocket.EndAccept(asyn);
Interlocked.Increment(ref ClientNum);
ClinetList.Add(ClientSocket);
mOnConnected(this,new ClientID(this));
WaiData(ClientSocket, ClientNum);
MaiSocket.BeginAccept(new AsyncCallback(ClinetConnection), null);
}
catch (Exception E)
{
}
}
public class SocketPack
{
public Socket cSocketName;
public byte[] dataBuffer = new byte[64];
public int CID;
public SocketPack(Socket socket, int ID)
{
cSocketName = socket;
CID = ID;
}
}
private void WaiData(Socket socketData, int Num) //等待数据
{
try
{
if (ClientCallBack == null)
{
ClientCallBack = new AsyncCallback(onData);
}
SocketPack Sp = new SocketPack(socketData, Num);
socketData.BeginReceive(Sp.dataBuffer, 0, Sp.dataBuffer.Length, SocketFlags.None, ClientCallBack, Sp);
}
catch (Exception E)
{
}
}
private void onData(IAsyncResult asny) //接受数据
{
SocketPack Sp = (SocketPack)asny.AsyncState;
try
{
int iRx = Sp.cSocketName.EndReceive(asny);
char[] chars = new char[iRx + 1];
string IDData = new string(chars);
string[] str = IDData.Split(new char[] { '|' });
if (str[0] == "Mes")
{
}
WaiData(Sp.cSocketName, Sp.CID);
}
catch (ObjectDisposedException SE)
{
}
catch (SocketException E)
{
if (E.ErrorCode == 10054)
{
ClinetList[Sp.CID - 1] = null;
mOnConnected(this, new ClientID(this));
}
}
}
public void SendMess(string SendText,int SendID) //发送数据
{
try
{
byte[] sendData = System.Text.Encoding.UTF8.GetBytes(SendText);
Socket SendSocket = (Socket)ClinetList[SendID];
SendSocket.Send(sendData);
}
catch (Exception E)
{
}
}
}
}
第二个ClientID.cs代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Collections;
namespace CSockets
{
public class ClientID
{
public ClientID(SocketStart ss)
{
}
}
}
浙公网安备 33010602011771号