概述
使用HPsocketCS进行TCP的连接与发送。
关键地点在连接接受到数据和,发送数据的情况。
第一步:将HPsocket引用到项目文件中
第二步:将头文件的引用写上
using HPSocketCS;
第三步:创建TCP对象
TcpServer hpServer = new TcpServer();
第四步:创建连接和连接事件
hpServer.OnAccept += HpServer_OnAccept1; //连接事件
hpServer.OnClose += HpServer_OnClose1; //断开连接事件
// 接收数据
hpServer.OnReceive += HpServer_OnReceive1;
// 发送数据
hpServer.OnSend += HpServer_OnSend;
// 设置服务端IP
//这里我直接将IP地址写死了,IP地址是一串string类型的字符串
//所以我们可以在Winform中通过TextBox的形式将IP写入其中
hpServer.IpAddress = "127.0.0.1";
// 设置端口
//端口号是一个Int类型的数字
hpServer.Port = Convert.ToUInt16(8000);
hpServer.SendPolicy = SendPolicy.Direct;
//在这里我将上位机作为服务端,PLC作为客户端
//服务端开启
hpServer.Start();
string strMsg = "服务端已开启并监听.";
listBoxMsg.Items.Add(strMsg);
listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
strMsg = "服务端监听Socket为{0}:{1}.";
listBoxMsg.Items.Add(strMsg);
listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
string ipListen = "";
ushort portListen = 0;
hpServer.GetListenAddress(ref ipListen, ref portListen);
第五步创建对应的连接事件
由于TCP的发送信号是在TCP线程中进行快速循环的,所以我们在发送信号的时候不能将发送信号写在OnSend函数中去。
所以我们在接受数据中写接受信号,然后调用我们要运行的程序,在另外在运行程序结束后发送信号
private HandleResult HpServer_OnSend(IntPtr connId, byte[] bytes)
{
return HandleResult.Ok;
}
/// <summary>
/// TCP接受数据,connIdTCP连接句柄,dataTCP获取到的数据
/// </summary>
/// <param name="connId"></param>
/// <param name="data"></param>
/// <returns></returns>
private HandleResult HpServer_OnReceive1(IntPtr connId, byte[] data)
{
string test;
try
{
test = Encoding.Default.GetString(data);
string strMsg_01 = "服务器接受数据: " + test;
listBoxMsg.Items.Add(strMsg_01);
listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
if (test == "abcde")
{
//user()为工作运行程序
User();
test = "";
//在运行程序结束后发送数据出去
TCPSend();
}
return HandleResult.Ok;
}
catch (Exception)
{
return HandleResult.Ignore;
}
}
private void TCPSend()
{
string sendcenter = Convert.ToString(centerx * 1000) + Convert.ToString(centery * 1000);
byte[] sendByetcenter = Encoding.Default.GetBytes(sendcenter);
hpServer.Send(ID, sendByetcenter, sendByetcenter.Length);
}
private HandleResult HpServer_OnClose1(IntPtr connId, SocketOperation enOperation, int errorCode)
{
return HandleResult.Ok;
}
private HandleResult HpServer_OnAccept1(IntPtr connId, IntPtr pClient)
{
//tCP运行句柄
ID = connId;
return HandleResult.Ok;
}
private void TCPSend()
{
//sendcenter这个是我们需要发送的信息,先将其转化为字符串再转化为byte类型
string sendcenter = Convert.ToString(centerx*1000) + Convert.ToString(centery * 1000);
byte[] sendByetcenter = Encoding.Default.GetBytes(sendcenter);
//ID是TCP的句柄,我们可以再连接事件中将ID进行赋值,ID的类型是IntPtr的句柄类型
hpServer.Send(ID, sendByetcenter, sendByetcenter.Length);
}
效果图:
最后
以上就是负责柜子为你收集整理的HPsocketCS,TCP通讯连接与发送的全部内容,希望文章能够帮你解决HPsocketCS,TCP通讯连接与发送所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复