做木质的网站/淘宝关键词怎么选取
目录
- 一、用C#在屏幕上连续输出50行信息
- 二、利用UDP向室友电脑发送(接收)这50行消息
- 三、编写一个简单的Form窗口程序,并发送文字发送给室友电脑
- 四、wireshark 抓包
- 五、总结
- 六、参考资料
本实验所用环境:
Visual Studio 2019
Wireshark
一、用C#在屏幕上连续输出50行信息
(1)打开vs2019,选择C#控制台应用程序
(2)进入代码编辑界面输入如下代码
使用一个循环来连续输出50行信息
for (int i = 1; i < 51; i++){Console.Write(" hello cqjtu!重交物联2018级\n");}Console.ReadLine();
(3)实现效果如下
二、利用UDP向室友电脑发送(接收)这50行消息
本人电脑作为服务端,vs选用控制台应用程序
(1)服务端代码如下
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;namespace UDP
{class Program{static void Main(string[] args){int recv;byte[] data = new byte[1024];//得到本机IP,设置UDP端口号 IPEndPoint ip = new IPEndPoint(IPAddress.Any, 8001);Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//绑定网络地址newsock.Bind(ip);Console.WriteLine("这里是服务器,名称为{0}", Dns.GetHostName());//等待客户机连接Console.WriteLine("等待客户端连接");//得到客户机IPIPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);EndPoint Remote = (EndPoint)(sender);recv = newsock.ReceiveFrom(data, ref Remote);Console.WriteLine("消息来自于{0}: ", Remote.ToString());Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));//客户端连接成功后,发送信息string welcome = "你好 !客户端 ";//字符串与字节数组相互转换data = Encoding.UTF8.GetBytes(welcome);//发送信息newsock.SendTo(data, data.Length, SocketFlags.None, Remote);while (true){data = new byte[1024];//接收信息recv = newsock.ReceiveFrom(data, ref Remote);Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));}}}
}
(2)客户端代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;//客户端namespace UDPClient
{class Program{static void Main(string[] args){byte[] data = new byte[1024];// string input, string Data;//构建TCP 服务器,获取本地主机名Console.WriteLine("这是客户端,名称为{0}", Dns.GetHostName());//设置服务IP(这个IP地址是服务器的IP),设置TCP端口号IPEndPoint ip = new IPEndPoint(IPAddress.Parse("10.61.73.201"), 8001);//定义网络类型,数据连接类型和网络协议UDPSocket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);string welcome = "你好!服务端 ";data = Encoding.UTF8.GetBytes(welcome);server.SendTo(data, data.Length, SocketFlags.None, ip);IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);EndPoint Remote = (EndPoint)sender;data = new byte[1024];//对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制int recv = server.ReceiveFrom(data, ref Remote);Console.WriteLine("消息来自于{0}: ", Remote.ToString());Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));int i = 0;while (true){string s = "hello cqjtu!重交物联2018级" + " "+i;Console.WriteLine(s);server.SendTo(Encoding.UTF8.GetBytes(s), Remote);//将数据发送到指定的终结点if (i == 50){break;}i++;}Console.WriteLine("Stopping Client.");server.Close();Console.ReadLine();}}
}
(3)服务端运行结果如下
(4)客户端运行结果如下
三、编写一个简单的Form窗口程序,并发送文字发送给室友电脑
vs2019选择windows窗体应用程序
(1)服务端代码如下
using System;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Threading;namespace fuwuqi
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){try{//点击开始侦听的时候,服务器创建一个负责监听IP地址跟端口号的SocketSocket socketwatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPAddress ip = IPAddress.Any;//创建端口对象IPEndPoint point = new IPEndPoint(ip, 8003);//绑定socketwatch.Bind(point);showMsg("监听成功!");socketwatch.Listen(10);//创建一个线程Thread th = new Thread(Listen);th.IsBackground = true;th.Start(socketwatch);}catch{showMsg("监听失败");}}Socket socketSend;//等待客户端的连接void Listen(Object o){try{Socket socketwatch = o as Socket;while (true){//等待客户端的连接socketSend = socketwatch.Accept();showMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功!");//开启一个新的线程不断的接收客户端信息Thread th = new Thread(Receive);th.IsBackground = true;th.Start(socketSend);}}catch{ }}//接收客户端发送的信息void Receive(Object o){try{Socket socketSend = o as Socket;while (true){byte[] buffer = new byte[1024 * 1024 * 2];int r = socketSend.Receive(buffer);if (r == 0){break;}string str = Encoding.UTF8.GetString(buffer, 0, r);showMsg(socketSend.RemoteEndPoint + ":" + str);}}catch{ }}void showMsg(string str){textBox1.AppendText(str + "\r\n");}
}
(2)客户端代码如下
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;namespace wulian1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}Socket socketSend;private void button1_Click(object sender, EventArgs e){socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint point = new IPEndPoint(IPAddress.Parse("10.61.73.201"), 8003);socketSend.Connect(point);showMsg("连接成功!");Thread th = new Thread(Receive);th.IsBackground = true;th.Start();}//客户端接收服务器发送的消息void Receive(){try{while (true){byte[] buffer = new byte[1024 * 1024 * 2];int r = socketSend.Receive(buffer);if (r == 0){break;}string str = Encoding.UTF8.GetString(buffer, 0, r);showMsg(socketSend.RemoteEndPoint + ":" + str);}}catch{ }}void showMsg(string s){textBox1.AppendText(s + "\r\n");}//客户端向服务器发送消息private void button2_Click(object sender, EventArgs e){string str = textBox2.Text;int j;for (j = 0; j < 50; j++){string str1 = str + j;byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str1);socketSend.Send(buffer);}}
(3)服务端运行效果
(4)客户端运行效果
四、wireshark 抓包
(1)通过筛选器选出UDP包
(2)通过ip找出目标包
(3)查看目的地址,源地址,数据类型
(4)包中相应信息
五、总结
做了这次实验,我了解了UDP协议的特点及编程,而且通过wireshark抓取包知道了其数据帧的结构,可谓是获益匪浅。
六、参考资料
1.C#利用套接字实现数据发送.
2.基于C#的UDP协议的同步实现.
3.初识C#网络编程