Socket TCP 异步-Client端
C# Socket TCP 异步-Client端
using System.Net.Sockets;
using System.Net;
namespace client
{
public partial class client : Form
{
byte[] bytes = new byte[1024];
Socket senderSock;
public client()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
IPAddress ipAddr = IPAddress.Parse("192.168.0.4");
senderSock = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
StateObject so = new StateObject();
so.socket = senderSock;
senderSock.BeginConnect(ipAddr, 9510, new AsyncCallback(Connect), so);
}
delegate void MyDelegate(string s);
void setextBox1(string s)
{
textBox1.Text += (s + "\n");
}
public void Connect(IAsyncResult ar)
{
StateObject so = (StateObject)ar.AsyncState;
MyDelegate md = new MyDelegate(setextBox1);
textBox1.Invoke(md, (object)"connect");
so.socket.EndConnect(ar);
}
private void button1_Click(object sender, EventArgs e)
{
StateObject so = new StateObject();
so.socket = senderSock;
so.buffer = Encoding.Unicode.GetBytes("aaaa");
senderSock.BeginSend(so.buffer, 0, so.buffer.Length,
SocketFlags.None, new AsyncCallback(Send), so);
}
public void Send(IAsyncResult ar)
{
StateObject so = (StateObject)ar.AsyncState;
MyDelegate md = new MyDelegate(setextBox1);
object[] b = new object[1];
b[0] = (object)Encoding.Unicode.GetString(so.buffer, 0, so.buffer.Length);
textBox1.Invoke(md, b);
int bytesSend = so.socket.EndSend(ar);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if(senderSock.Connected)
{
senderSock.Shutdown(SocketShutdown.Receive);
senderSock.Close();
}
}
}
public class StateObject : Object
{
public Socket socket;
public byte[] buffer = new byte[1024];
}
}
C# Socket TCP 异步-Server端
using System.Net;
using System.Net.Sockets;
private void Form1_Load(object sender, EventArgs e)
{
IPAddress ipAddr = IPAddress.Parse("192.168.0.4");
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 9510);
sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
sListener.Bind(ipEndPoint);
sListener.Listen(10);
sListener.BeginAccept(new AsyncCallback(Accept), sListener);
}
public void Accept(IAsyncResult ar)
{
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);
object[] obj = new object[2];
obj[0] = buffer;
obj[1] = handler;
handler.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
new AsyncCallback(Receive), obj);
listener.BeginAccept(new AsyncCallback(Accept), listener);
}
byte[] buffer = new byte[1024];
byte[] buffernew = new byte[1024];
delegate void MyDelegate(string s);
void setextBox1(string s)
{
textBox1.Text += (s + "\n");
}
public void Receive(IAsyncResult ar)
{
Socket handler;
object[] obj = new object[2];
obj = (object[])ar.AsyncState;
byte[] buffer = (byte[])obj[0];
handler = (Socket)obj[1];
int bytesRead = handler.EndReceive(ar);
if (bytesRead <= 0)
{
return;
}
MyDelegate md = new MyDelegate(setextBox1);
string s = Encoding.Unicode.GetString(buffer, 0, bytesRead) + "\n";
textBox1.Invoke(md, s);
obj[0] = buffernew;
obj[1] = handler;
handler.BeginReceive(buffernew, 0, buffernew.Length, SocketFlags.None,
new AsyncCallback(Receive), obj);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (sListener.Connected)
{
sListener.Shutdown(SocketShutdown.Receive);
sListener.Close();
}
}