📄 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;
using System.Net.Sockets;
using System.Threading;
namespace LsxwClient
{
public partial class form : Form
{
Socket ClientSocket;
//connectReset 连接服务器控制
private static ManualResetEvent connectReset = new ManualResetEvent(false);
//sendReset 向服务器发送数据控制
private static ManualResetEvent sendReset = new ManualResetEvent(false);
string ip = "10.14.110.229";
IPEndPoint myServer;
//private bool conn = false;
//用于界面文本框显示的委托
delegate void invokeclientReceive(string netMessage);
delegate void invokeclientInfo(string netMessage);
delegate void invokeclientSend();
public form()
{
InitializeComponent();
//this.Closing += new CancelEventHandler(Form1_closing);
}
private void btnSend_Click(object sender, EventArgs e)
{
//conn = false;
if (clientSend.Text == "")
{
MessageBox.Show("请输入要发送的内容!", "提示", MessageBoxButtons.OK);
}
else
{
try
{
//初始化服务器地址和端口
IPAddress ServerIP = IPAddress.Parse(ip);
int ServerPort = Int32.Parse("5257");
myServer= new IPEndPoint(ServerIP, ServerPort);
//新建客户端套接字实例
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
catch (Exception ee)
{ MessageBox.Show(ee.ToString()); }
//连接控制开启,开始异步连接,阻塞当前线程
try
{
connectReset.Reset();
ClientSocket.BeginConnect(myServer, new AsyncCallback(ConnectCallback), ClientSocket);
connectReset.WaitOne();
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
}
}
//客户端异步连接回调处理
private void ConnectCallback(IAsyncResult ar)
{
try
{
//获取状态,连接完毕
Socket Client = (Socket)ar.AsyncState;
Client.EndConnect(ar);
//conn = true;
//新开客户端发送数据线程
Thread SendThread = new Thread(new ThreadStart(Client_Send));
SendThread.Start();
//连接控制关闭
connectReset.Set();
Invoke(new invokeclientInfo(InfoShow), "与服务器连接成功!\r\n");
}
catch (Exception ee)
{ MessageBox.Show(ee.ToString()); }
}
private void Client_Send()
{
string cs = clientSend.Text.ToString();
Invoke(new invokeclientSend(SendClear));
try
{
//异步发送数据
byte[] BytesSendData = System.Text.Encoding.BigEndianUnicode.GetBytes(cs );
ClientSocket.BeginSend(BytesSendData, 0, BytesSendData.Length, 0, new AsyncCallback(ClientSendCallback), ClientSocket);
}
catch (Exception ee)
{ MessageBox.Show(ee.ToString()); }
}
//客户端异步发送数据回调处理
private void ClientSendCallback(IAsyncResult ar)
{
try
{
//获取状态,结束异步发送
ClientSocket = (Socket)ar.AsyncState;
int ClientSendNumber = ClientSocket.EndSend(ar);
//新开客户端异步接受数据线程
Thread ReceiveThread = new Thread(new ThreadStart(Client_Receive));
ReceiveThread.Start();
//发送控制关闭
sendReset.Set();
}
catch (Exception ee)
{ MessageBox.Show(ee.ToString()); }
}
private void Client_Receive()
{
try
{
StateObject clientState = new StateObject();
clientState.workSocket = ClientSocket;
//客户端异步接受数据
ClientSocket.BeginReceive(clientState.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ClientReadCallback), clientState);
}
catch (Exception ee)
{ MessageBox.Show(ee.ToString()); }
}
//异步接受数据回调处理
private void ClientReadCallback(IAsyncResult ar)
{
try
{
StateObject clientState = (StateObject)ar.AsyncState;
Socket ServerTemp=clientState.workSocket;
int ClientReadNumber = ServerTemp.EndReceive(ar);
clientState.sb.Append(System.Text.Encoding.BigEndianUnicode.GetString(clientState.buffer, 0, ClientReadNumber));
string t = clientState.sb.ToString();
clientState.sb.Remove(0,t.Length);
//MessageBox.Show(t);
//进行显示接受到的信息
//clientReceive.AppendText(t + "\r\n");
Invoke(new invokeclientReceive(ReceiveShow), t);
//如果客户端接收到的数据与服务器发送的数据相同,则表示客户端已发送数据成功,可关闭套接字
if (t == "ok!")
{
ClientSocket.Close();
Invoke(new invokeclientInfo(InfoShow), "发送完毕,客户端关闭!");
}
else
{
MessageBox.Show(t, "错误", MessageBoxButtons.OK);
//ServerTemp.BeginReceive(clientState.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ClientReadCallback), clientState);
}
}
catch (Exception ee)
{ MessageBox.Show(ee.ToString()); }
}
private void ReceiveShow(string netMessage)
{
clientReceive.AppendText(netMessage + "\r\n");
}
private void InfoShow(string netMessage)
{
clientInfo.AppendText(netMessage + "\r\n");
}
private void SendClear()
{
clientSend.Clear();
}
//private void Form1_closing(object sender, System.ComponentModel.CancelEventArgs e)
//{
// DialogResult result = MessageBox.Show("确定退出本系统?", "确认退出系统", MessageBoxButtons.OKCancel);
// if (result == DialogResult.OK)
// {
// if (conn == true)
// {
// ClientSocket.Close();
// }
// Application.Exit();
// }
// else
// {
// e.Cancel = true;
// }
//}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -