具体可以参考:
>qttcpserver并没有提供直接发送到指定IP的函数。qttcpserver是一个TCP服务器,它监听来自客户端的连接请求,并在连接建立后与客户端进行数据交换。如果你想发送数据到特定的IP地址,你可以使用Qt的QTcpSocket类。以下是一个简单的示例代码:
```cpp
QTcpSocket socket = new QTcpSocket();
socket->connectToHost(ipAddress, port);
if (socket->waitForConnected()) {
socket->write(data);
}
socket->disconnectFromHost();
```
其中,ipAddress是要发送数据的目标IP地址,port是目标端口号,data是要发送的数据。这段代码将创建一个QTcpSocket对象,连接到指定的IP地址和端口号,并发送数据。你可以将这段代码放在qttcpserver的槽函数中,以便在收到客户端连接请求后发送数据到指定的IP地址。这是我以前在学校的时候做的一个c/s系统里面的类似qq聊天工具
你看看。。
这是客服端的代码:
using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemLinq;
using SystemText;
using SystemWindowsForms;
using SystemThreading;
using SystemNet;
using SystemNetSockets;
namespace demo2
{
public partial class frmTouchWe : Form
{
Thread a;
//发送IP跟端口
private UdpClient udp = new UdpClient("127001",9000);
//接收端口
private UdpClient udpSend = new UdpClient(8000);
private IPEndPoint ip = new IPEndPoint(IPAddressAny,0);
public frmTouchWe()
{
InitializeComponent();
FormCheckForIllegalCrossThreadCalls = false;
}
private void frmTouchWe_Load(object sender, EventArgs e)
{ //定义线程开始
a = new Thread(new ThreadStart(Run));
aStart(); }
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//客服接收信息。d出窗体
frmAnswerInfo answerInfo = new frmAnswerInfo();
answerInfoShow(); }
private void button1_Click(object sender, EventArgs e)
{
//在自己的信息栏中显示自己的信息
lsbInfoItemsAdd(txtInfoText);
//用户信息内容
string Mes = txtInfoText;
//用户信息
string mes = "用户:"+Programuserid+"("+Programusername+")"+" " + time;
//转换成字节
byte[] b = UTF8EncodingUTF8GetBytes(Mes);
byte[] bb = UTF32EncodingUTF8GetBytes(mes);
//发送信息
udpSend(bb, bbLength);
udpSend(b, bLength);
txtInfoText = "";
}
//循环接受客服发来的信息
private void Run()
{
while (true)
{
byte[] b = udpSendReceive(ref ip);
string mes = UTF8EncodingUTF8GetString(b);
lsbInfoItemsAdd(mes);
}
}
private void button2_Click(object sender, EventArgs e)
{
thisClose();
}
private void button3_Click_1(object sender, EventArgs e)
{
//清空所有项
lsbInfoItemsClear();
}
}
}
下面是服务器端的代码
using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemLinq;
using SystemText;
using SystemWindowsForms;
using SystemThreading;
using SystemNet;
using SystemNetSockets;
namespace demo2
{
public partial class frmAnswerInfo : Form
{
//定义一条线程,用来循环接收客户发来的信息
Thread a;
//定义另一条线程,用来升起窗体
Thread b;
//发送到信息的地址
private UdpClient udpSend = new UdpClient("127001",8000);
//接收端口
private UdpClient udp = new UdpClient(9000);
private IPEndPoint ip = new IPEndPoint(IPAddressAny,0);
public frmAnswerInfo()
{
InitializeComponent();
FormCheckForIllegalCrossThreadCalls = false;
}
//循环接收信息
private void Run()
{
while (true)
{
byte[] b = udpReceive(ref ip);
string mes = UTF8EncodingUTF8GetString(b);
lsbInfoItemsAdd(mes);
}
}
private void frmAnswerInfo_Load(object sender, EventArgs e)
{
//设置窗体的位置属性(窗体加载时候慢慢从右下角升上来~类似qq广告~~)
thisTop = ScreenPrimaryScreenWorkingAreaHeight;
thisLeft = ScreenPrimaryScreenWorkingAreaWidth - thisWidth;
//设置窗体的名字
a = new Thread(new ThreadStart(Run));
b = new Thread(new ThreadStart(run));
//开始线程
aStart();
bStart();
}
//用户点击谈话时显示该窗体
private void run()
{
while (true)
{
thisTop = thisTop - 10;
ThreadSleep(100);
if (ScreenPrimaryScreenWorkingAreaHeight - thisHeight >= thisTop)
{
break;
}
}
}
//发送按钮编码
private void button1_Click(object sender, EventArgs e)
{
//获取当前时间
DateTime time = DateTimeNow;
//在自己的信息栏中显示自己发出去的信息
lsbInfoItemsAdd("在线客服:"+time);
lsbInfoItemsAdd(txtInfoText);
//在客户端显示自己的信息标题
string mes = "在线客服:"+time;
//信息内容
string Mes = txtInfoText;
//发送信息标题
byte[] b = UTF8EncodingUTF8GetBytes(mes);
//发送信息内容
byte[] bb = UTF8EncodingUTF8GetBytes(Mes);
udpSendSend(b, bLength);
udpSendSend(bb,bbLength);
txtInfoText = "";
}
private void button2_Click(object sender, EventArgs e)
{
thisClose();
}
private void button3_Click(object sender, EventArgs e)
{
//清除所有项
lsbInfoItemsClear();
}
}
}
这个可以跑的。。我以前就用过的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)