日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

UDP协议下内网与公网IP进行发送消息,一对多.且选择不同的客户端发送消息

發(fā)布時(shí)間:2024/4/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UDP协议下内网与公网IP进行发送消息,一对多.且选择不同的客户端发送消息 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

客戶端代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net.Sockets;
using System.Threading;
using System.Net;

namespace p2p
{
??? public partial class Form1 : Form
??? {
??????? private Thread th;
??????? private UdpClient tcpl;
??????? public bool listenerRun = true;
??????? Socket s;
??????? //listenerRun為true,表示可以接受連接請(qǐng)求,false則為結(jié)束程序

??????? public Form1()
??????? {
??????????? InitializeComponent();

??????????? Control.CheckForIllegalCrossThreadCalls = false;
??????? }
??????? public void Stop()
??????? {
??????????? tcpl.Close();
??????????? th.Abort();//終止線程
??????????? MessageBox.Show("結(jié)束監(jiān)聽(tīng)....");
??????? }

??????? private void Form1_Load(object sender, EventArgs e)
??????? {

??????? }

??????? private void button1_Click(object sender, EventArgs e)
??????? {
?????????? th = new Thread(new ThreadStart(Listen));//新建一個(gè)用于監(jiān)聽(tīng)的線程
?????????? th.Start();//打開(kāi)新線程
??????? }

??????? private void Listen()
??????? {
??????????? try
??????????? {
??????????????? tcpl = new UdpClient(5656);//在5656端口新建一個(gè)TcpListener對(duì)象
??????????????? IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 5656);
??????????????? MessageBox.Show("正在監(jiān)聽(tīng)中....");
???????????????? while (listenerRun)//開(kāi)始監(jiān)聽(tīng)
???????????????? {
???????????????????? Byte[] stream = new Byte[80];
???????????????????? stream = tcpl.Receive(ref groupEP);
???????????????????
???????????????????? MessageBox.Show(groupEP.ToString() + System.Text.Encoding.UTF8.GetString(stream));???????????????
??????????????? }
??????????? }
??????????? catch (Exception ex)
??????????? {
???????????? MessageBox.Show(ex.Message);
??????????? }
????????????
??????? }

??????? private void button3_Click(object sender, EventArgs e)
??????? {
??????????? th = new Thread(new ThreadStart(Send));//新建一個(gè)用于監(jiān)聽(tīng)的線程
??????????? th.Start();//打開(kāi)新線程
??????? }

??????? public void Send()
??????? {
??????????? try
??????????? {
???????????????? s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
???????????????? IPAddress broadcast = IPAddress.Parse(this.textBox3.Text.Trim());
???????????????? byte[] sendbuf = Encoding.UTF8.GetBytes(this.textBox2.Text.Trim());
??????????????? IPEndPoint ep = new IPEndPoint(broadcast, 5270);
??????????????? s.Connect(ep);
??????????????? s.SendTo(sendbuf, ep);
??????????????? while (true)
??????????????? {
??????????????????? byte[] data = new byte[2048];
??????????????????? int rect = s.Receive(data);
??????????????????? byte[] chat = new byte[rect];
??????????????????? Buffer.BlockCopy(data, 0, chat, 0, rect);
??????????????????? textBox1.AppendText(System.Text.Encoding.Default.GetString(chat));
??????????????? }?
?????????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? MessageBox.Show(ex.Message);

??????????? }
??????????? finally
??????????? {
??????????????
??????????? }
????????????
??????? }

??????? private void button2_Click(object sender, EventArgs e)
??????? {
??????????? Stop();
??????? }

??? }
}?

服務(wù)端代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.Collections;

namespace p2pserver
{
??? public partial class Form1 : Form
??? {
??????? private Thread th;
??????? private UdpClient tcpl;
??????? public bool listenerRun = true;
??????? private ArrayList pclient;//
??????? IPEndPoint groupEP;
??????? public Form1()
??????? {
??????????? InitializeComponent();
??????????? this.button2.Enabled = false;
??????????? Control.CheckForIllegalCrossThreadCalls = false;
??????? }
??????? private void Listen()
??????? {
??????????? try
??????????? {
??????????????? tcpl = new UdpClient(5270);//在5656端口新建一個(gè)TcpListener對(duì)象
???????????????? groupEP = new IPEndPoint(IPAddress.Any, 5270);
???????????????? pclient = new ArrayList();
??????????????? while (listenerRun)//開(kāi)始監(jiān)聽(tīng)
??????????????? {
??????????????????? pclient.Add(groupEP);????
??????????????????? Byte[] stream = new Byte[80];
??????????????????? stream = tcpl.Receive(ref groupEP);
??????????????????? this.textBox1.AppendText(groupEP.ToString() + System.Text.Encoding.UTF8.GetString(stream));
??????????????? }
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? MessageBox.Show(ex.Message);
??????????? }
??????????? finally
??????????? {

??????????? }
??????? }
??????? public void Stop()
??????? {
??????????? try
??????????? {
????????????? tcpl.Close();
??????????????? th.Abort();//終止線程
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? MessageBox.Show(ex.Message);
??????????? }
??????? }
??????
??????? private void button1_Click(object sender, EventArgs e)
??????? {
??????????? this.button1.Enabled = false;
??????????? this.button2.Enabled = true;
??????????? th = new Thread(new ThreadStart(Listen));//新建一個(gè)用于監(jiān)聽(tīng)的線程
??????????? th.Start();//打開(kāi)新線程
??????? }

??????? private void button2_Click(object sender, EventArgs e)
??????? {
??????????? this.button2.Enabled = false;
??????????? this.button1.Enabled = true;
??????????? Stop();
??????? }

??????? private void button3_Click(object sender, EventArgs e)
??????? {
??????????? try
??????????? {
??????????????? int index = int.Parse(this.textBox3.Text.Trim());
??????????????? byte[] bytesMsg = Encoding.Default.GetBytes(this.textBox2.Text.Trim());
??????????????? IPEndPoint sc = (IPEndPoint)pclient[index];
??????????????? tcpl.Send(bytesMsg, bytesMsg.Length, sc);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? MessageBox.Show(ex.Message);
??????????? }
??????? }
??? }
}

轉(zhuǎn)載于:https://www.cnblogs.com/top5/archive/2010/03/29/1699479.html

總結(jié)

以上是生活随笔為你收集整理的UDP协议下内网与公网IP进行发送消息,一对多.且选择不同的客户端发送消息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。