这个是自己写的一个类使用已连接的Socket实例构造,处理数据发送,
这样写行不行?有什么缺点?。public class MySocket
{
private int port;
private byte[] recBuffer;
private ByteBuffer sckBuffer;
private Socket socket; public MySocket(Socket newSocket)
{
try
{
socket = newSocket;
port = ((IPEndPoint)socket.RemoteEndPoint).Port;
sckBuffer = new ByteBuffer();
recBuffer = new byte[socket.ReceiveBufferSize];
socket.BeginReceive(recBuffer, 0, recBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), socket);
}
catch (SocketException e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
} public int Port
{
get { return port; }
} public ByteBuffer SckBuffer
{
get { return SckBuffer; }
} public void Send(byte[] byteSend)
{
socket.BeginSend(byteSend, 0, byteSend.Length, SocketFlags.None, new AsyncCallback(SendCallBack), socket);
} public void Send(string stringSend)
{
socket.BeginSend(Encoding.ASCII.GetBytes(stringSend), 0, stringSend.Length, SocketFlags.None, new AsyncCallback(SendCallBack), socket);
} private void ReceiveCallBack(IAsyncResult ar)
{
try
{
Socket s = (Socket)ar.AsyncState;
int read = s.EndReceive(ar);
if (read != 0)
{
s.BeginReceive(recBuffer, 0, recBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), s);
sckBuffer.AppendBytes(recBuffer, 0, read);
}
else
{
socket.Close();
}
}
catch (SocketException e)
{
socket.Close();
Console.WriteLine(e.Message);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
} private void SendCallBack(IAsyncResult ar)
{
Socket s = (Socket)ar.AsyncState;
s.EndSend(ar);
} public void Close()
{
if (socket.Connected)
{
socket.Shutdown(SocketShutdown.Both);
}
socket.Close();
} ~MySocket()
{
socket.Close();
}
}
这样写行不行?有什么缺点?。public class MySocket
{
private int port;
private byte[] recBuffer;
private ByteBuffer sckBuffer;
private Socket socket; public MySocket(Socket newSocket)
{
try
{
socket = newSocket;
port = ((IPEndPoint)socket.RemoteEndPoint).Port;
sckBuffer = new ByteBuffer();
recBuffer = new byte[socket.ReceiveBufferSize];
socket.BeginReceive(recBuffer, 0, recBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), socket);
}
catch (SocketException e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
} public int Port
{
get { return port; }
} public ByteBuffer SckBuffer
{
get { return SckBuffer; }
} public void Send(byte[] byteSend)
{
socket.BeginSend(byteSend, 0, byteSend.Length, SocketFlags.None, new AsyncCallback(SendCallBack), socket);
} public void Send(string stringSend)
{
socket.BeginSend(Encoding.ASCII.GetBytes(stringSend), 0, stringSend.Length, SocketFlags.None, new AsyncCallback(SendCallBack), socket);
} private void ReceiveCallBack(IAsyncResult ar)
{
try
{
Socket s = (Socket)ar.AsyncState;
int read = s.EndReceive(ar);
if (read != 0)
{
s.BeginReceive(recBuffer, 0, recBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), s);
sckBuffer.AppendBytes(recBuffer, 0, read);
}
else
{
socket.Close();
}
}
catch (SocketException e)
{
socket.Close();
Console.WriteLine(e.Message);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
} private void SendCallBack(IAsyncResult ar)
{
Socket s = (Socket)ar.AsyncState;
s.EndSend(ar);
} public void Close()
{
if (socket.Connected)
{
socket.Shutdown(SocketShutdown.Both);
}
socket.Close();
} ~MySocket()
{
socket.Close();
}
}
正确写成控件然后就好了