兑现上一篇文章的诺言,这篇文章将提供异步Socket服务端和客户端程序的例子。具体步骤和知识点就不赘述了,上一篇文章里有详细的说明,异步只不过就是在同步的基础上使用了多线程。话不多说,上码!
服务端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp212
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
Socket socketWatch;
Socket socketSend;
private void button1_Click(object sender, EventArgs e)
{
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iPEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8050);
socketWatch.Bind(iPEnd);
socketWatch.Listen(10);
listBox1.Items.Add("开始监听...");
Thread thread = new Thread(Listen);
thread.IsBackground = true;
thread.Start();
}
void Listen()
{
socketSend = socketWatch.Accept();
listBox1.Items.Add("连接成功..." + socketSend.RemoteEndPoint.ToString());
Thread reciveThread = new Thread(Recive);
reciveThread.IsBackground = true;
reciveThread.Start();
}
void Recive()
{
while (true)
{
byte[] buffer = new byte[1024];
socketSend.Receive(buffer);
listBox1.Items.Add(Encoding.UTF8.GetString(buffer, 0, buffer.Length));
}
}
public void Send(string abc)
{
byte[] buffer = Encoding.UTF8.GetBytes(abc);
socketSend.Send(buffer);
}
private void button2_Click(object sender, EventArgs e)
{
Send(textBox1.Text);
}
}
}
客户端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp213
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
Socket socketSend;
private void button1_Click(object sender, EventArgs e)
{
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iPEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8050);
socketSend.Connect(iPEnd);
listBox1.Items.Add("连接到服务器");
Thread reciveThread = new Thread(Recive);
reciveThread.IsBackground = true;
reciveThread.Start();
}
void Recive()
{
while (true)
{
byte[] buffer = new byte[1024];
socketSend.Receive(buffer);
listBox1.Items.Add(Encoding.UTF8.GetString(buffer));
}
}
void Send(string abc)
{
byte[] buffer = Encoding.UTF8.GetBytes(abc);
socketSend.Send(buffer);
}
private void button2_Click(object sender, EventArgs e)
{
Send(textBox1.Text);
}
}
}
C#并不是只能使用Socket类去建立网络通信,还可以使用TcpListener类,道理都差不多。