问题描述
- 请大神帮我看下这部分代码怎么写?谢谢!很急
-
如图所示,我把基本通讯功能已经实现,但是我想实现下图中红色圈中部分的功能,自动发送跟数据格式的功能怎么实现啊,希望发送端跟接收端都可以实现这个数据格式的功能,谢谢
整体代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//添加的命名空间引用
using System.Net;
using System.Net.Sockets;
using System.Threading;namespace UDP_扩展开发
{
public partial class UDPTOOL : Form
{
delegate void AddListBoxItemCallback(string text);
AddListBoxItemCallback listBoxCallback;
//使用的接收端口号
private int port = 8001;
private UdpClient udpClient;
public UDPTOOL()
{
InitializeComponent();
listBoxCallback = new AddListBoxItemCallback(AddListBoxItem);
}private void AddListBoxItem(string text) { //如果listBoxReceive被不同的线程访问则通过委托处理; if (listBoxReceive.InvokeRequired) { this.Invoke(listBoxCallback, text); } else { listBoxReceive.Items.Add(text); listBoxReceive.SelectedIndex = listBoxReceive.Items.Count - 1; } } /// <summary> /// 在后台运行的接收线程 /// </summary> private void ReceiveData() { //在本机指定的端口接收 udpClient = new UdpClient(port); IPEndPoint remote = null; //接收从远程主机发送过来的信息; while (true) { try { //关闭udpClient时此句会产生异常 byte[] bytes = udpClient.Receive(ref remote); string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length); AddListBoxItem(string.Format("来自{0}:{1}", remote, str)); } catch { //退出循环,结束线程 break; } } } /// <summary> /// 发送数据到远程主机 /// </summary> private void sendData() { UdpClient myUdpClient = new UdpClient(); IPAddress remoteIP; if (IPAddress.TryParse(textBoxRemoteIP.Text, out remoteIP) == false) { MessageBox.Show("远程IP格式不正确"); return; } IPEndPoint iep = new IPEndPoint(remoteIP, port); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(textBoxSend.Text); try { myUdpClient.Send(bytes, bytes.Length, iep); myUdpClient.Close(); textBoxSend.Focus(); } catch (Exception err) { MessageBox.Show(err.Message, "发送失败"); } finally { myUdpClient.Close(); } } private void UDPTOOL_Load(object sender, System.EventArgs e) { //设置listBox样式 listBoxReceive.HorizontalScrollbar = true; listBoxReceive.Dock = DockStyle.Fill; //获取本机第一个可用IP地址 IPAddress myIP = (IPAddress)Dns.GetHostAddresses(Dns.GetHostName()).GetValue(0); //为了在同一台机器调试,此IP也作为默认远程IP textBoxRemoteIP.Text = myIP.ToString(); //创建一个线程接收远程主机发来的信息 Thread myThread = new Thread(new ThreadStart(ReceiveData)); //将线程设为后台运行 myThread.IsBackground = true; myThread.Start(); textBoxSend.Focus(); } /// <summary> /// 单击发送按钮触发的事件 /// </summary> private void buttonSend_Click(object sender, System.EventArgs e) { { sendData(); } } /// <summary> /// 在textBoxSend中按下并释放Enter键后触发的事件 /// </summary> private void textBoxData_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) sendData(); } private void UDPTOOL_FormClosing(object sender, FormClosingEventArgs e) { udpClient.Close(); } }
}
如果有大神愿意帮忙可留下自己的qq,我会及时主动加上的,谢谢!
解决方案
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer(this.components);
t.Interval = int.Parse(间隔文本框.Text) * 1000;
t.Enabled = true;
t.Tick +=new System.EventHandler((a, b) => { sendData(); });
时间: 2024-09-17 02:22:31