运行程序后, 先要点击开始接收按钮后才能点击发送数据
Form1.cs代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
using System.Net;
namespace WinSocket
{
public partial class Form1 : Form
{
BackgroundWorker bgWorker = null;
public Form1()
{
InitializeComponent();
bgWorker = new BackgroundWorker();
bgWorker.WorkerSupportsCancellation = true;
this.AddEvent();
}
/// <summary>
/// 注册事件
/// </summary>
private void AddEvent()
{
this.bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
this.btnSend.Click += new EventHandler(btnSend_Click);
this.btnStartReceive.Click += new EventHandler(btnStartReceive_Click);
this.btnStopRecevie.Click += new EventHandler(btnStopRecevie_Click);
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endpoint = new IPEndPoint(0, 8000);
receiveSocket.Bind(endpoint);
receiveSocket.Listen(10);
try
{
while (true)
{
Socket tmpSocket = receiveSocket.Accept();
byte[] buffer = new byte[tmpSocket.ReceiveBufferSize];
if (tmpSocket.Receive(buffer) > 0)
{
textBox2.Text += Encoding.UTF8.GetString(buffer) + Environment.NewLine;
}
else
{
System.Threading.Thread.Sleep(1000);
}
}
}
catch(Exception err)
{
MessageBox.Show(err.Message);
}
}
void btnStopRecevie_Click(object sender, EventArgs e)
{
if (this.bgWorker.IsBusy)
{
this.bgWorker.CancelAsync();
this.btnStartReceive.Enabled = true;
this.btnStopRecevie.Enabled = false;
}
}
void btnStartReceive_Click(object sender, EventArgs e)
{
this.btnStartReceive.Enabled = false;
this.bgWorker.RunWorkerAsync();
this.btnStopRecevie.Enabled = true;
}
void btnSend_Click(object sender, EventArgs e)
{
Socket sendSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sendSocket.Connect("187.186.0.63", 8000);
byte[] buffer = Encoding.UTF8.GetBytes(textBox1.Text);
sendSocket.Send(buffer);
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
this.btnStartReceive.Enabled = true;
this.btnStopRecevie.Enabled = false;
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
using System.Net;
namespace WinSocket
{
public partial class Form1 : Form
{
BackgroundWorker bgWorker = null;
public Form1()
{
InitializeComponent();
bgWorker = new BackgroundWorker();
bgWorker.WorkerSupportsCancellation = true;
this.AddEvent();
}
/// <summary>
/// 注册事件
/// </summary>
private void AddEvent()
{
this.bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
this.btnSend.Click += new EventHandler(btnSend_Click);
this.btnStartReceive.Click += new EventHandler(btnStartReceive_Click);
this.btnStopRecevie.Click += new EventHandler(btnStopRecevie_Click);
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endpoint = new IPEndPoint(0, 8000);
receiveSocket.Bind(endpoint);
receiveSocket.Listen(10);
try
{
while (true)
{
Socket tmpSocket = receiveSocket.Accept();
byte[] buffer = new byte[tmpSocket.ReceiveBufferSize];
if (tmpSocket.Receive(buffer) > 0)
{
textBox2.Text += Encoding.UTF8.GetString(buffer) + Environment.NewLine;
}
else
{
System.Threading.Thread.Sleep(1000);
}
}
}
catch(Exception err)
{
MessageBox.Show(err.Message);
}
}
void btnStopRecevie_Click(object sender, EventArgs e)
{
if (this.bgWorker.IsBusy)
{
this.bgWorker.CancelAsync();
this.btnStartReceive.Enabled = true;
this.btnStopRecevie.Enabled = false;
}
}
void btnStartReceive_Click(object sender, EventArgs e)
{
this.btnStartReceive.Enabled = false;
this.bgWorker.RunWorkerAsync();
this.btnStopRecevie.Enabled = true;
}
void btnSend_Click(object sender, EventArgs e)
{
Socket sendSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sendSocket.Connect("187.186.0.63", 8000);
byte[] buffer = Encoding.UTF8.GetBytes(textBox1.Text);
sendSocket.Send(buffer);
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
this.btnStartReceive.Enabled = true;
this.btnStopRecevie.Enabled = false;
}
}
}
Form.Designer.cs代码如下
namespace WinSocket
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Windows 窗体设计器生成的代码
private System.Windows.Forms.Button btnSend;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button btnStartReceive;
private System.Windows.Forms.Button btnStopRecevie;
}
}
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Windows 窗体设计器生成的代码
private System.Windows.Forms.Button btnSend;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button btnStartReceive;
private System.Windows.Forms.Button btnStopRecevie;
}
}